我有一个带有四个 TabItems 的 WPF TabControl,并将自定义样式应用于 TabControl 和 TabItems,如下所示:
<Style TargetType="TabControl" x:Key="TabControlStyle">
<Setter Property="Background" Value="Transparent" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="TabStripPlacement" Value="Left" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabControl">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- The container for tab item headers -->
<TabPanel
Grid.Column="0"
Panel.ZIndex="1"
Margin="0,0,4,-1"
IsItemsHost="True"
Background="Transparent" />
<!-- Shadow to the left of the tab pages -->
<Border Grid.Column="0" Width="5" HorizontalAlignment="Right">
<Border.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
<GradientStop Offset="0" Color="Transparent" />
<GradientStop Offset="1" Color="{StaticResource ShadowGray}" />
</LinearGradientBrush>
</Border.Background>
</Border>
<!-- Tab page -->
<Border Grid.Column="1"
Background="White"
SnapsToDevicePixels="true"
BorderThickness="1"
BorderBrush="{StaticResource HeaderBlueBrush}">
<ContentPresenter ContentSource="SelectedContent" />
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type TabItem}" x:Key="TabItemStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<!-- Tab item header -->
<Border Name="border"
SnapsToDevicePixels="True"
BorderThickness="0"
Padding="5,8,40,8"
Margin="0,0,-4,0">
<TextBlock Name="buttonText"
Margin="0"
FontSize="14"
Foreground="{StaticResource FontDarkGrayBrush}"
Text="{TemplateBinding Header}"
VerticalAlignment="Center" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Trigger.Setters>
<Setter TargetName="border" Property="Background" Value="{StaticResource HoverBlueBrush}" />
</Trigger.Setters>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Trigger.Setters>
<Setter TargetName="border" Property="Background" Value="{StaticResource SelectionBlueBrush}" />
<Setter TargetName="buttonText" Property="Foreground" Value="White"/>
</Trigger.Setters>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
如您所见,选项卡项目标题由一个边框组成(当鼠标悬停在它上面或被选中时,它会获得不同的颜色),并且在该边框中有一个显示标题标题的 TextBlock。我猜很简单。
问题是标题对鼠标输入没有正确反应。基本上:在他们做出反应之前,我必须悬停/单击实际文本(我猜是 TextBlock)。如果我单击文本的右侧,则没有任何反应。悬停也是一样。但是,当我已经将鼠标悬停在一个标题的文本上时(因此它会获得“悬停颜色”),然后将鼠标移动到文本的右侧(通常不会做出反应),然后悬停颜色仍然存在并且确实在我真正离开边境之前不要离开。
这是一张图片来澄清它:
是什么导致了这种行为?我假设这是不正常的,这很烦人,因为 TabControl 不会像人们期望的那样做出反应。
我尝试“反转”边框/文本块组合的边距/填充(通过为 TextBlock 提供边距来留出空间,而不是为边框提供任何填充),但这并没有改变任何东西。
帮助?