2012-11-21 24 views
1

我有一个WPF TabControl的有四个的TabItems和应用自定义样式到两个的TabControl和的TabItems如下:TabItem的标题不响应鼠标,只在文字

<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)。如果我点击文字的右侧,则什么都不会发生。悬停也一样。但是,当我已经将鼠标悬停在一个标题的文本上(因此它获得了“悬停颜色”),然后将鼠标移动到文本的右侧(它通常不会反应),那么悬停的颜色仍然存在在我离开边境之前不要离开。

这里有一个形象作出澄清:

Example screenshot

是什么原因造成这种现象?我认为这是不正常的,这是非常恼人的,因为TabControl没有反应人们期望的方式。

我试着'扭转'边界/ TextBlock组合的边距/填充(通过给TextBlock一个边距来制作空间,而不是给边框任何填充),但是这并没有改变任何东西。

帮助?

+0

你不会碰巧有这样的版本分享吗?这是一个令人惊叹的造型,我想将其纳入我的应用程序:),当然还有许可。 – Andy

回答

4

选项卡项目模板中的边框背景必须为非空白。否则,边框对于鼠标交互不可见。透明也可以。

<Border Name="border" Background="Transparent" ... 
+0

真棒,我从来不知道!谢谢... –