2016-07-25 2 views
1

J'ai défini un ControlTemplate personnalisé pour TabItem où j'ai en plus le ContentPresenter un Button (pour cacher l'onglet quand on clique dessus).TabItem ControlTemplate élément Visibilité

<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> 

Je veux que le Button d'être Visible que pour certains TabItems et Collapsed pour les autres. Collapsed état devrait être la valeur par défaut et je ne comprends pas comment le définir à Visible pour certains onglets.

Si les éléments de l'onglet sont comme

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

et je veux avoir l'onglet « refermable » être montrant ce Button mais l'onglet « Normal » pas à l'affiche Button, comment cela peut-il être fait?

Répondre

1

Vous pouvez utiliser la propriété Tag de TabItem pour identifier son type et regarder ce type de l'intérieur Button avec la liaison 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> 

J'ai effectué Border attribue un peu juste des onglets séparés visuels, ils ne sont pas nécessaires pour que cet exemple fonctionne.