2016-07-25 117 views
1

我已經爲TabItem定義了一個自定義的ControlTemplate,我除了ContentPresenter之外還有一個Button(單擊時隱藏該標籤)。TabItem ControlTemplate元素可見性

<Style TargetType="{x:Type TabItem}"> 
    <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="TabItem"> 
        <Border> 
          <Grid> 
           <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="*"/> 
             <ColumnDefinition Width="Auto"/> 
           </Grid.ColumnDefinitions> 
           <ContentPresenter ContentSource="Header"/> 
           <Button Grid.Column="1" Content="x" Visibility="Visible"/> 
         </Grid> 
        </Border>  
       </ControlTemplate> 
      </Setter.Value> 
    </Setter> 
</Style> 

我想Button只爲某些TabItemsCollapsed別人是VisibleCollapsed狀態應該是默認設置,我不明白如何將其設置爲Visible以用於某些選項卡。

如果選項卡項目就像

<TabItem Header="Normal tab"> 
    <Grid /> 
</TabItem> 
<TabItem Header="Closable tab"> 
    <Grid/> 
</TabItem> 

,我想有「可關閉標籤」是展示這個Button但「普通標籤」不顯示此Button,這可怎麼辦呢?

回答

1

您可以使用TabItemTag屬性來識別其類型,並從Button內部使用RelativeSource綁定來觀看此類型。

<TabControl> 
    <TabControl.Resources> 
     <Style TargetType="{x:Type TabItem}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="TabItem"> 
         <Border BorderThickness="1" BorderBrush="Green" Margin="1"> 
          <Grid> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="*"/> 
            <ColumnDefinition Width="Auto"/> 
           </Grid.ColumnDefinitions> 
           <ContentPresenter ContentSource="Header"/> 
           <Button Grid.Column="1" Content="x"> 
            <Button.Style> 
             <Style TargetType="Button"> 
              <Setter Property="Visibility" Value="Collapsed" /> 
              <Style.Triggers> 
               <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TabItem}, Path=Tag}" Value="Closable"> 
                <Setter Property="Visibility" Value="Visible" /> 
               </DataTrigger> 
              </Style.Triggers> 
             </Style> 
            </Button.Style> 
           </Button> 
          </Grid> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </TabControl.Resources> 

    <TabItem Header="Normal tab"> 
     <Grid /> 
    </TabItem> 
    <TabItem Tag="Closable" Header="Closable tab"> 
     <Grid /> 
    </TabItem> 
</TabControl> 

我編輯Border屬性一點點只是視覺單獨的標籤,他們沒有必要爲這個例子的工作。