2016-07-25 8 views
1

Ich habe eine benutzerdefinierte ControlTemplate für TabItem definiert, wo ich neben der ContentPresenter eine Button (zum Ausblenden der Registerkarte, wenn Sie geklickt haben).TabItem ControlTemplate Element Sichtbarkeit

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

Ich möchte die ButtonVisible für bestimmte nur sein TabItems und Collapsed für andere. Collapsed State sollte der Standard sein und ich verstehe nicht, wie Sie es für bestimmte Registerkarten auf Visible setzen.

Wenn die Registerkarte Elemente sind wie

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

und ich möchte die „Verschließbare Reiter“ haben, um diese Button zeigt aber die „Registerkarte Normal“ nicht dieses Button zeigt, wie kann dies geschehen?

Antwort

1

Sie können TabItem 's Tag Eigenschaft verwenden, um seinen Typ zu identifizieren, und beobachten Sie diesen Typ von innerhalb Button mit RelativeSource Bindung.

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

I edited Border ein wenig, nur um visuelle separaten Registerkarten Attribute, sie sind nicht notwendig für dieses Beispiel funktioniert.

Verwandte Themen