Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Disable TabStop on Expander

I set IsTabStop to False, but Tab still navigates to the expander.

Any ideas what am I doing wrong?

<Expander Header="Data" IsTabStop="False">
    <Border Background="White" BorderThickness="0"/>
</Expander>
like image 870
Meh Avatar asked Nov 16 '10 00:11

Meh


People also ask

How do I enable the isenabled button on an expander?

Make a copy of the style template for the Expander, find the toggle button within the template and set your IsEnabled property to it specifically instead of to the Expander control itself.

How to disable Auto-expand for vertical tabs in Microsoft Edge?

This post will show you how to disable auto-expand for vertical tabs when the tab bar is collapsed in Microsoft Edge. Switch to the vertical tab layout using the button in the title bar. Collapse the vertical tab bar using the pin button in its top right corner. Hover over the collapsed vertical tab bar to expand it.

How do I expand a collapsed tab bar?

Hover over the collapsed vertical tab bar to expand it. Move the mouse pointer to the right edge of the expanded tab bar until the mouse pointer turns into a double arrow cursor. Press and hold the left mouse button.

How do I expand the vertical tab bar in word?

Switch to the vertical tab layout using the button in the title bar. Collapse the vertical tab bar using the pin button in its top right corner. Hover over the collapsed vertical tab bar to expand it. Move the mouse pointer to the right edge of the expanded tab bar until the mouse pointer turns into a double arrow cursor.


1 Answers

It looks like a bug in the Expander template:

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/e51ad4f5-95d3-4c3e-be87-7917e4d81fa0/

Here's a full workaround (ugly, I know):

<Window
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 x:Class="WpfApplication1.MainWindow"
 x:Name="Window"
 Title="MainWindow"
 Width="640" Height="480">
 <Window.Resources>
  <Style x:Key="ExpanderRightHeaderStyle" TargetType="{x:Type ToggleButton}">
   <Setter Property="Template">
    <Setter.Value>
     <ControlTemplate TargetType="{x:Type ToggleButton}">
      <Border Padding="{TemplateBinding Padding}">
       <Grid SnapsToDevicePixels="False" Background="Transparent">
        <Grid.RowDefinitions>
         <RowDefinition Height="19"/>
         <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid>
         <Grid.LayoutTransform>
          <TransformGroup>
           <TransformGroup.Children>
            <TransformCollection>
             <RotateTransform Angle="-90"/>
            </TransformCollection>
           </TransformGroup.Children>
          </TransformGroup>
         </Grid.LayoutTransform>
         <Ellipse x:Name="circle" Stroke="DarkGray" HorizontalAlignment="Center" VerticalAlignment="Center" Width="19" Height="19"/>
         <Path x:Name="arrow" Stroke="#666" StrokeThickness="2" HorizontalAlignment="Center" VerticalAlignment="Center" SnapsToDevicePixels="false" Data="M 1,1.5 L 4.5,5 L 8,1.5"/>
        </Grid>
        <ContentPresenter HorizontalAlignment="Center" Margin="0,4,0,0" VerticalAlignment="Top" SnapsToDevicePixels="True" Grid.Row="1" RecognizesAccessKey="True"/>
       </Grid>
      </Border>
      <ControlTemplate.Triggers>
       <Trigger Property="IsChecked" Value="true">
        <Setter Property="Data" TargetName="arrow" Value="M 1,4.5  L 4.5,1  L 8,4.5"/>
       </Trigger>
       <Trigger Property="IsMouseOver" Value="true">
        <Setter Property="Stroke" TargetName="circle" Value="#FF3C7FB1"/>
        <Setter Property="Stroke" TargetName="arrow" Value="#222"/>
       </Trigger>
       <Trigger Property="IsPressed" Value="true">
        <Setter Property="Stroke" TargetName="circle" Value="#FF526C7B"/>
        <Setter Property="StrokeThickness" TargetName="circle" Value="1.5"/>
        <Setter Property="Stroke" TargetName="arrow" Value="#FF003366"/>
       </Trigger>
      </ControlTemplate.Triggers>
     </ControlTemplate>
    </Setter.Value>
   </Setter>
  </Style>
  <Style x:Key="ExpanderUpHeaderStyle" TargetType="{x:Type ToggleButton}">
   <Setter Property="Template">
    <Setter.Value>
     <ControlTemplate TargetType="{x:Type ToggleButton}">
      <Border Padding="{TemplateBinding Padding}">
       <Grid SnapsToDevicePixels="False" Background="Transparent">
        <Grid.ColumnDefinitions>
         <ColumnDefinition Width="19"/>
         <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid>
         <Grid.LayoutTransform>
          <TransformGroup>
           <TransformGroup.Children>
            <TransformCollection>
             <RotateTransform Angle="180"/>
            </TransformCollection>
           </TransformGroup.Children>
          </TransformGroup>
         </Grid.LayoutTransform>
         <Ellipse x:Name="circle" Stroke="DarkGray" HorizontalAlignment="Center" VerticalAlignment="Center" Width="19" Height="19"/>
         <Path x:Name="arrow" Stroke="#666" StrokeThickness="2" HorizontalAlignment="Center" VerticalAlignment="Center" SnapsToDevicePixels="false" Data="M 1,1.5 L 4.5,5 L 8,1.5"/>
        </Grid>
        <ContentPresenter HorizontalAlignment="Left" Margin="4,0,0,0" VerticalAlignment="Center" SnapsToDevicePixels="True" Grid.Column="1" RecognizesAccessKey="True"/>
       </Grid>
      </Border>
      <ControlTemplate.Triggers>
       <Trigger Property="IsChecked" Value="true">
        <Setter Property="Data" TargetName="arrow" Value="M 1,4.5  L 4.5,1  L 8,4.5"/>
       </Trigger>
       <Trigger Property="IsMouseOver" Value="true">
        <Setter Property="Stroke" TargetName="circle" Value="#FF3C7FB1"/>
        <Setter Property="Stroke" TargetName="arrow" Value="#222"/>
       </Trigger>
       <Trigger Property="IsPressed" Value="true">
        <Setter Property="Stroke" TargetName="circle" Value="#FF526C7B"/>
        <Setter Property="StrokeThickness" TargetName="circle" Value="1.5"/>
        <Setter Property="Stroke" TargetName="arrow" Value="#FF003366"/>
       </Trigger>
      </ControlTemplate.Triggers>
     </ControlTemplate>
    </Setter.Value>
   </Setter>
  </Style>
  <Style x:Key="ExpanderLeftHeaderStyle" TargetType="{x:Type ToggleButton}">
   <Setter Property="Template">
    <Setter.Value>
     <ControlTemplate TargetType="{x:Type ToggleButton}">
      <Border Padding="{TemplateBinding Padding}">
       <Grid SnapsToDevicePixels="False" Background="Transparent">
        <Grid.RowDefinitions>
         <RowDefinition Height="19"/>
         <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid>
         <Grid.LayoutTransform>
          <TransformGroup>
           <TransformGroup.Children>
            <TransformCollection>
             <RotateTransform Angle="90"/>
            </TransformCollection>
           </TransformGroup.Children>
          </TransformGroup>
         </Grid.LayoutTransform>
         <Ellipse x:Name="circle" Stroke="DarkGray" HorizontalAlignment="Center" VerticalAlignment="Center" Width="19" Height="19"/>
         <Path x:Name="arrow" Stroke="#666" StrokeThickness="2" HorizontalAlignment="Center" VerticalAlignment="Center" SnapsToDevicePixels="false" Data="M 1,1.5 L 4.5,5 L 8,1.5"/>
        </Grid>
        <ContentPresenter HorizontalAlignment="Center" Margin="0,4,0,0" VerticalAlignment="Top" SnapsToDevicePixels="True" Grid.Row="1" RecognizesAccessKey="True"/>
       </Grid>
      </Border>
      <ControlTemplate.Triggers>
       <Trigger Property="IsChecked" Value="true">
        <Setter Property="Data" TargetName="arrow" Value="M 1,4.5  L 4.5,1  L 8,4.5"/>
       </Trigger>
       <Trigger Property="IsMouseOver" Value="true">
        <Setter Property="Stroke" TargetName="circle" Value="#FF3C7FB1"/>
        <Setter Property="Stroke" TargetName="arrow" Value="#222"/>
       </Trigger>
       <Trigger Property="IsPressed" Value="true">
        <Setter Property="Stroke" TargetName="circle" Value="#FF526C7B"/>
        <Setter Property="StrokeThickness" TargetName="circle" Value="1.5"/>
        <Setter Property="Stroke" TargetName="arrow" Value="#FF003366"/>
       </Trigger>
      </ControlTemplate.Triggers>
     </ControlTemplate>
    </Setter.Value>
   </Setter>
  </Style>
  <Style x:Key="ExpanderHeaderFocusVisual">
   <Setter Property="Control.Template">
    <Setter.Value>
     <ControlTemplate>
      <Border>
       <Rectangle Stroke="Black" StrokeDashArray="1 2" StrokeThickness="1" Margin="0" SnapsToDevicePixels="true"/>
      </Border>
     </ControlTemplate>
    </Setter.Value>
   </Setter>
  </Style>
  <Style x:Key="ExpanderDownHeaderStyle" TargetType="{x:Type ToggleButton}">
   <Setter Property="Template">
    <Setter.Value>
     <ControlTemplate TargetType="{x:Type ToggleButton}">
      <Border Padding="{TemplateBinding Padding}">
       <Grid SnapsToDevicePixels="False" Background="Transparent">
        <Grid.ColumnDefinitions>
         <ColumnDefinition Width="19"/>
         <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Ellipse x:Name="circle" Stroke="DarkGray" HorizontalAlignment="Center" VerticalAlignment="Center" Width="19" Height="19"/>
        <Path x:Name="arrow" Stroke="#666" StrokeThickness="2" HorizontalAlignment="Center" VerticalAlignment="Center" SnapsToDevicePixels="false" Data="M 1,1.5 L 4.5,5 L 8,1.5"/>
        <ContentPresenter HorizontalAlignment="Left" Margin="4,0,0,0" VerticalAlignment="Center" SnapsToDevicePixels="True" Grid.Column="1" RecognizesAccessKey="True"/>
       </Grid>
      </Border>
      <ControlTemplate.Triggers>
       <Trigger Property="IsChecked" Value="true">
        <Setter Property="Data" TargetName="arrow" Value="M 1,4.5  L 4.5,1  L 8,4.5"/>
       </Trigger>
       <Trigger Property="IsMouseOver" Value="true">
        <Setter Property="Stroke" TargetName="circle" Value="#FF3C7FB1"/>
        <Setter Property="Stroke" TargetName="arrow" Value="#222"/>
       </Trigger>
       <Trigger Property="IsPressed" Value="true">
        <Setter Property="Stroke" TargetName="circle" Value="#FF526C7B"/>
        <Setter Property="StrokeThickness" TargetName="circle" Value="1.5"/>
        <Setter Property="Stroke" TargetName="arrow" Value="#FF003366"/>
       </Trigger>
      </ControlTemplate.Triggers>
     </ControlTemplate>
    </Setter.Value>
   </Setter>
  </Style>
  <Style x:Key="ExpanderStyle1" TargetType="{x:Type Expander}">
   <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
   <Setter Property="Background" Value="Transparent"/>
   <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
   <Setter Property="VerticalContentAlignment" Value="Stretch"/>
   <Setter Property="BorderBrush" Value="Transparent"/>
   <Setter Property="BorderThickness" Value="1"/>
   <Setter Property="Template">
    <Setter.Value>
     <ControlTemplate TargetType="{x:Type Expander}">
      <Border SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="3">
       <DockPanel>
        <ToggleButton x:Name="HeaderSite" Focusable="{TemplateBinding Focusable}" FocusVisualStyle="{StaticResource ExpanderHeaderFocusVisual}" Margin="1" MinHeight="0" MinWidth="0" Style="{StaticResource ExpanderDownHeaderStyle}" Content="{TemplateBinding Header}" ContentTemplate="{TemplateBinding HeaderTemplate}" ContentTemplateSelector="{TemplateBinding HeaderTemplateSelector}" FontFamily="{TemplateBinding FontFamily}" FontSize="{TemplateBinding FontSize}" FontStretch="{TemplateBinding FontStretch}" FontStyle="{TemplateBinding FontStyle}" FontWeight="{TemplateBinding FontWeight}" Foreground="{TemplateBinding Foreground}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" IsChecked="{Binding IsExpanded, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" DockPanel.Dock="Top"/>
        <ContentPresenter x:Name="ExpandSite" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Focusable="false" Visibility="Collapsed" DockPanel.Dock="Bottom"/>
       </DockPanel>
      </Border>
      <ControlTemplate.Triggers>
       <Trigger Property="IsExpanded" Value="true">
        <Setter Property="Visibility" TargetName="ExpandSite" Value="Visible"/>
       </Trigger>
       <Trigger Property="ExpandDirection" Value="Right">
        <Setter Property="DockPanel.Dock" TargetName="ExpandSite" Value="Right"/>
        <Setter Property="DockPanel.Dock" TargetName="HeaderSite" Value="Left"/>
        <Setter Property="Style" TargetName="HeaderSite" Value="{StaticResource ExpanderRightHeaderStyle}"/>
       </Trigger>
       <Trigger Property="ExpandDirection" Value="Up">
        <Setter Property="DockPanel.Dock" TargetName="ExpandSite" Value="Top"/>
        <Setter Property="DockPanel.Dock" TargetName="HeaderSite" Value="Bottom"/>
        <Setter Property="Style" TargetName="HeaderSite" Value="{StaticResource ExpanderUpHeaderStyle}"/>
       </Trigger>
       <Trigger Property="ExpandDirection" Value="Left">
        <Setter Property="DockPanel.Dock" TargetName="ExpandSite" Value="Left"/>
        <Setter Property="DockPanel.Dock" TargetName="HeaderSite" Value="Right"/>
        <Setter Property="Style" TargetName="HeaderSite" Value="{StaticResource ExpanderLeftHeaderStyle}"/>
       </Trigger>
       <Trigger Property="IsEnabled" Value="false">
        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
       </Trigger>
      </ControlTemplate.Triggers>
     </ControlTemplate>
    </Setter.Value>
   </Setter>
  </Style>
 </Window.Resources>

 <Grid x:Name="LayoutRoot">
  <Expander Focusable="False" Margin="68,81,293,0" VerticalAlignment="Top" Height="77" Header="Expander" Style="{DynamicResource ExpanderStyle1}">
   <Grid/>
  </Expander>
 </Grid>
</Window>
like image 93
lesscode Avatar answered Sep 17 '22 02:09

lesscode