2013-03-22 49 views
2

我有一個TabItem樣式的問題,也許有人可以幫助我。在TabItem上觸發IsMouseOver ContenTemplate

繼問題的風格:

<Style x:Key="ChildrenTabItemStyle" TargetType="TabItem"> 
       <Style.Resources> 
        <SolidColorBrush x:Key="ButtonNormalBackground" Color="#FFEAE8E8"/> 
        <LinearGradientBrush x:Key="ButtonOverBackground" EndPoint="0,1" StartPoint="0,0"> 
         <GradientStop Color="#FFFAFAFA" Offset="0"/> 
         <GradientStop Color="#FFE0E0E3" Offset="1"/> 
        </LinearGradientBrush> 
        <LinearGradientBrush x:Key="ButtonPressedBackground" EndPoint="0,1" StartPoint="0,0"> 
         <GradientStop Color="#FFE0E0E2" Offset="0"/> 
         <GradientStop Color="#FFF8F8F8" Offset="1"/> 
        </LinearGradientBrush> 
        <SolidColorBrush x:Key="ButtonNormalBorder" Color="#FF969696"/> 
        <Style x:Key="CloseableTabItemButtonStyle" TargetType="{x:Type Button}"> 
         <Setter Property="FocusVisualStyle" Value="{x:Null}"/> 
         <Setter Property="Background" Value="{DynamicResource ButtonNormalBackground}"/> 
         <Setter Property="BorderBrush" Value="Transparent"/> 
         <Setter Property="BorderThickness" Value="2,2,2,0"/> 
         <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
         <Setter Property="HorizontalContentAlignment" Value="Center"/> 
         <Setter Property="VerticalContentAlignment" Value="Center"/> 
         <Setter Property="Padding" Value="4"/> 
         <Setter Property="Template"> 
          <Setter.Value> 
           <ControlTemplate TargetType="{x:Type Button}"> 
            <Grid> 
             <Border SnapsToDevicePixels="true" x:Name="Chrome" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2" Opacity="0" /> 
             <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" RecognizesAccessKey="True"/> 
            </Grid> 
            <ControlTemplate.Triggers> 
             <Trigger Property="IsMouseOver" Value="True"> 
              <Setter Property="Opacity" TargetName="Chrome" Value="1"/> 
              <Setter Property="Background" TargetName="Chrome" Value="{DynamicResource ButtonOverBackground}" /> 
             </Trigger> 
             <Trigger Property="IsPressed" Value="True"> 
              <Setter Property="Opacity" TargetName="Chrome" Value="1"/> 
              <Setter Property="Background" TargetName="Chrome" Value="{DynamicResource ButtonPressedBackground}" /> 
             </Trigger> 
             <Trigger Property="IsEnabled" Value="false"> 
              <Setter Property="Foreground" Value="#ADADAD"/> 
             </Trigger> 
            </ControlTemplate.Triggers> 
           </ControlTemplate> 
          </Setter.Value> 
         </Setter> 
        </Style> 
       </Style.Resources> 
       <Setter Property="Height" Value="40"/> 
       <Setter Property="MinWidth" Value="90"/> 
       <Setter Property="FontWeight" Value="Bold"/> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type TabItem}"> 
          <Border Name="Border" Margin="1,-1,-1,-1"> 
           <Grid> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="*"/> 
             <ColumnDefinition Width="Auto"/> 
            </Grid.ColumnDefinitions> 

            <ContentPresenter Name="BorderContent" 
                 Content="{Binding Path=Header}" 
                 VerticalAlignment="Center" 
                 HorizontalAlignment="Center"/> 

            <Button x:Name="PART_Close" 
              HorizontalAlignment="Right" 
              Margin="3,0,3,0" 
              VerticalAlignment="Top" 
              Width="16" 
              Height="16" 
              DockPanel.Dock="Right" 
              Style="{DynamicResource CloseableTabItemButtonStyle}" 
              ToolTip="Close Tab" 
              Cursor="Hand" 
              Command="{Binding Path=CloseCommand}" 
              Visibility="Hidden"> 
             <Path x:Name="Path" 
               Stretch="Fill" 
               StrokeThickness="0.5" 
               Stroke="#FF333333" 
               Fill="#FF969696" 
               Data="F1 M 2.28484e-007,1.33331L 1.33333,0L 4.00001,2.66669L 6.66667,6.10352e-005L 8,1.33331L 5.33334,4L 8,6.66669L 6.66667,8L 4,5.33331L 1.33333,8L 1.086e-007,6.66669L 2.66667,4L 2.28484e-007,1.33331 Z " 
               HorizontalAlignment="Stretch" 
               VerticalAlignment="Stretch"/> 
            </Button> 
           </Grid> 
          </Border> 
          <ControlTemplate.Triggers> 
           <Trigger Property="IsMouseOver" Value="True"> 
            <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource ButtonBorderBrush}"/> 
            <Setter TargetName="Border" Property="BorderThickness" Value="2,2,2,0"/> 
            <Setter TargetName="PART_Close" Property="Visibility" Value="Visible"/> 
           </Trigger> 
           <Trigger Property="IsSelected" Value="True"> 
            <Setter TargetName="Border" Property="Background" Value="{StaticResource EnvLayout}"/> 
            <Setter Property="Foreground" Value="#FFFFFF"/> 
            <Setter TargetName="PART_Close" Property="Visibility" Value="Visible"/> 
           </Trigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 

我的問題是集中在IsMouseOver觸發器;當沒有選中選項卡時,事實上,只有當光標位於TabItem的Header上(在ContentTemplate中定義)時,纔會觸發此事件,而不是在邊框的任何點。

爲了更好地解釋我的問題,下面的一些截圖:

當IsMouseOver =真我的TabItem必須有一個灰色的邊框和關閉按鈕的出現;你可以在下面的圖片看,這種行爲appens只有當我的光標正是在標題:

Cursor over the Header

Curson near the edge of the border

顯然,當光標不在頁眉,你不能甚至選擇Tab。

我該如何解決這個問題?

預先感謝您的幫助,

德博拉

回答

3

我有最近類似的問題,

試着改變你的

<ControlTemplate TargetType="{x:Type TabItem}"> 
    <Border Name="Border" Margin="1,-1,-1,-1"> 

<ControlTemplate TargetType="{x:Type TabItem}"> 
    <Border Name="Border" Margin="1,-1,-1,-1" Background="Transparent"> 

這似乎是如果未設置背景的默認值,只有渲染區域響應狀態觸發器

+0

非常感謝你Viv,現在它工作! :d – Deby 2013-03-22 12:33:05

相關問題