次のように、4 つの 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>
ご覧のとおり、タブ項目のヘッダーは Border で構成され (マウスがその上に置かれているとき、または選択されているときに別の色になります)、その Border にはヘッダー タイトルを表示する TextBlock があります。十分に単純だと思います。
問題は、ヘッダーがマウス入力に適切に反応しないことです。基本的に:反応する前に、実際のテキスト(私が推測しているTextBlock)をホバー/クリックする必要があります。テキストの右側をクリックしても何も起こりません。ホバリングも同じ。ただし、既に 1 つのヘッダーのテキストにカーソルを合わせている場合 (「ホバリング カラー」が表示されます)、マウスをテキストの右側 (通常は反応しない場所) に移動すると、ホバリング カラーが残ります。私が実際に国境を離れるまで、立ち去らないでください。
これを明確にするための画像を次に示します。
この動作の原因は何ですか? 私はそれが正常ではないと仮定しています.TabControlが人々が期待するように反応しないので、それは非常に迷惑です.
Border/TextBlock コンボの Margin/Padding を「反転」してみました (Border に Padding を与えるのではなく、TextBlock に Margin を与えることでスペースを作ります) が、何も変わりません。
ヘルプ?