2016-04-08 16 views
0

'dan miras almaz. Tüm TabItems'lerin aynı genel görünüme sahip olduğu ancak içinde farklı Simgeler bulunduğu bir TabControl oluşturmak istedim. Tüm stillerim harici Kaynak Sözlüğündedir. Ana Pencerede denetimimi şu şekilde bildirdim:Style, başka bir

<TabControl Grid.Row="2" TabStripPlacement="Left" > 
     <TabItem Style="{StaticResource IconDev}"> 
      <Label Content="Content 1" /> 
     </TabItem> 
     <TabItem Style="{StaticResource IconTab}"> 
      <Label Content="Content 2" /> 
     </TabItem> 
    </TabControl 

Ve sonra iki stil oluşturdum. Style="{StaticResource IconDev}" sadece simgesini ekler çünkü

<Style x:Key="IconTab" TargetType="{x:Type TabItem}"> 
    <Setter Property="MinHeight" Value="70"/> 
    <Setter Property="MaxHeight" Value="70"/> 
    <Setter Property="MinWidth" Value="70"/> 
    <Setter Property="MaxWidth" Value="70"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TabItem}"> 
       <Grid> 
        <Border 
         Name="Border" 
         Margin="0,0,-4,0" 
         Background="#FFF" 
         BorderBrush="#FFF" 
         BorderThickness="0" 
         CornerRadius="0" > 
         <ContentPresenter x:Name="ContentSite" 
           VerticalAlignment="Center" 
           HorizontalAlignment="Center" 
           ContentSource="Header" 
           Margin="0" 
           RecognizesAccessKey="True"/> 
        </Border> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsSelected" Value="True"> 
         <Setter Property="Panel.ZIndex" Value="100" /> 
         <Setter TargetName="Border" Property="Background" Value="#000" /> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="False"> 
         <Setter TargetName="Border" Property="Background" Value="#000" /> 
         <Setter TargetName="Border" Property="BorderBrush" Value="#000"/> 
         <Setter Property="Foreground" Value="#000"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
<Style x:Key="IconDev" TargetType="{x:Type TabItem}" BasedOn="{StaticResource IconTab}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate> 
       <TabItem> 
        <TabItem.Header> 
         <StackPanel> 
          <Viewbox Width="50" Height="50"> 
           <Frame Source="icon-dev.xaml" /> 
          </Viewbox> 
         </StackPanel> 
        </TabItem.Header> 
       </TabItem> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Ancak bir şey miras ile iyi çalışmıyor ama bir geçerli değildir: Bir simge için bir sekme Öğe genel bir görünüm için ilk ve daha sonra özel olarak genel düzen Style="{StaticResource IconTab}" numaralı belgede açıklanmıştır. Neyi yanlış yapıyorum?

+0

'IconDev' gerektiği Min/Max boyut ayarını uygulayın (temel stilde miras alınız). Ayrıca TabItem'in şablonunu sıfırlar (geçersiz kılar). peki yanlış olan nedir? – ASh

+0

Öncelikle 'IconTab''den tetikleyici uygulamıyor, içindeki ikon ile bir varsayılan Sekme görünümü var. İkincisi, işe yaramıyor. Tıklandığında sekmeyi değiştirmez. Ama aynı simge boyutu 'SimgeTab' yazılmış – przemoo83

+0

'IconDev 'tempate silinen şablon dediğiniz gibi yapar ve tetikleyicileri yoktur. Boyut belirleyiciler Template setter'den bağımsızdır ve – ASh

cevap

2

IconDev Min/Maks boyut ayarını uygulamalıdır (temel stilde miras almalıdır). Ayrıca TabItem'in şablonunu (geçersiz kıl, sil) de sıfırlar. Yeni şablonda tetikleyici yok. Boyut belirleyiciler Şablon setter bağımsızdır ve bunlar tek sekme için

Sekme başlığı içerik değil şablonunda, dışarıdan değiştirilebilir çalışmak

Ör Her iki TabItem IconTab stili kullanan, ilk sekme karmaşık başlığı içeriği

<TabControl TabStripPlacement="Left" > 
    <TabItem Style="{StaticResource IconTab}"> 
     <!--Label is a tab content--> 
     <Label Content="Content 1" /> 

     <TabItem.Header> 
      <StackPanel> 
       <Viewbox Width="50" Height="50"> 
        <Frame Source="icon-dev.xaml" /> 
       </Viewbox> 
      </StackPanel> 
     </TabItem.Header> 
    </TabItem> 

    <TabItem Style="{StaticResource IconTab}" Header="Text"> 
     <Label Content="Content 2" /> 
    </TabItem> 
</TabControl> 
sahiptir

güncelleme: türetilen stil şablonu geçersiz kılma olmadan yalnızca başlığını değiştirebilir

<Style x:Key="IconDev" TargetType="{x:Type TabItem}" BasedOn="{StaticResource IconTab}"> 
    <Setter Property="Header"> 
     <Setter.Value> 
       <StackPanel> 
        <Viewbox Width="50" Height="50"> 
         <Frame Source="icon-dev.xaml" /> 
        </Viewbox> 
       </StackPanel> 
     </Setter.Value> 
    </Setter> 
</Style> 
<TabControl TabStripPlacement="Left" > 
    <TabItem Style="{StaticResource IconDev}"> 
     <Label Content="Content 1" />     
    </TabItem> 
    <TabItem Style="{StaticResource IconTab}" Header="Text"> 
     <Label Content="Content 2" /> 
    </TabItem> 
</TabControl> 
+0

İlk yaptığım buydu ama daha zarif hale getirmek ve harici stil dosyasında her şeyi yapmak istedim. Teşekkürler – przemoo83

+0

@ przemoo83, lütfen güncellememi kontrol edin. – ASh

+0

Büyük bir yardımcınız Nihayet bu mekanizmanın nasıl çalıştığını anlamaya başladım – przemoo83