2012-03-20 60 views
0

访问定制HeaderTemplate中元件我已经以下代码:的TabItem - 如何从TabItem的样式触发

<Window x:Class="kkk.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 

     <Style TargetType="{x:Type TabItem}" x:Key="maintemplate"> 

      <Style.Resources> 
       <DataTemplate x:Key="headertemplate" DataType="{x:Type TabItem}"> 
        <StackPanel Orientation="Horizontal"> 
         <ContentPresenter Content="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem} }, Path=Header}"/> 
         <Button Content="X" x:Name="CloseButton"> 
          <Button.LayoutTransform> 
           <ScaleTransform ScaleX="0.8" ScaleY="0.5"></ScaleTransform> 
          </Button.LayoutTransform> 
         </Button> 
        </StackPanel> 
       </DataTemplate> 
      </Style.Resources> 

      <Setter Property="HeaderTemplate" Value="{StaticResource headertemplate}"></Setter> 

     </Style> 

    </Window.Resources> 
    <Grid> 

     <TabControl> 
      <TabItem Header="tab1" Style="{StaticResource maintemplate}"></TabItem> 
      <TabItem Header="tab1" Style="{StaticResource maintemplate}"></TabItem> 
     </TabControl> 

    </Grid> 
</Window> 

它创建与每个TabItem的报头小x按钮的tabcontrol(它将被用于关闭选项卡)。 现在我想隐藏这个按钮,当选项卡没有被选中。 我试着像somwthing:

<Style.Triggers> 
       <Trigger Property="IsSelected" Value="False"> 
        <Setter Property="????" Value="Visible"></Setter> 
       </Trigger> 
      </Style.Triggers> 

但我不知道如何从TabItem的方式触发访问CloseButton - >我试过TargetName="CloseButton"但它不工作...

回答

3

我会在Button而不是TabItem上设置样式触发器,并使用RelativeSource绑定得到TabItem.IsSelected

<Style x:Key="CloseButtonStyle" TargetType="{x:Type Button}"> 
    <Setter Property="Visibility" Value="Visible"></Setter> 
    <Style.Triggers> 
     <DataTrigger Property="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type TabItem}}" Value="True"> 
      <Setter Property="Visibility" Value="Visible"></Setter> 
     </DataTrigger > 
    </Style.Triggers> 
</Style> 
1
<Style TargetType="{x:Type TabItem}" x:Key="maintemplate"> 
    <Style.Resources> 
     <DataTemplate x:Key="headertemplate" DataType="{x:Type TabItem}"> 
      <StackPanel Orientation="Horizontal"> 
       <StackPanel.Resources> 
        <local:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter"/> 
       </StackPanel.Resources> 
       <ContentPresenter Content="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem} }, Path=Header}"/> 
       <Button Content="X" x:Name="CloseButton" Visibility="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type TabItem}},Path=IsSelected,Converter={StaticResource BoolToVisibilityConverter}}"> 
        <Button.LayoutTransform> 
         <ScaleTransform ScaleX="0.8" ScaleY="0.5"></ScaleTransform> 
        </Button.LayoutTransform> 
       </Button> 
      </StackPanel> 
     </DataTemplate> 
    </Style.Resources> 
    <Setter Property="HeaderTemplate" Value="{StaticResource headertemplate}"></Setter> 
</Style> 

 

public class BoolToVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var isVisible = value as bool?; 
     if (isVisible == null || !isVisible.Value) 
     { 
      return Visibility.Collapsed; 
     } 
     return Visibility.Visible; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
}