2012-01-04 17 views
6

Projelerimden birinde bir ListView miras aldım ve yeni bir denetim şablonu belirleyerek stili geçersiz kıldım. Ayrıca sütun başlığı stilini geçersiz kıldım. Bir stil anahtarı belirleyerek ve GridView stilini referans olarakListView stilinin içinden GridViewColumnHeader stilini ayarlama

1): Şimdiye kadar bunu yapmak için iki yol bulduk

<Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle"> 
    <Setter Property="Background" Value="Wheat" /> 
</Style> 

<GridView ColumnHeaderContainerStyle="{StaticResource MyHeaderStyle}"> 

2) Yukarıdaki stil için bir stil anahtarı belirleyerek vermeyerek. Artık GridView'deki stile başvurmam gerekmiyor, ancak listeden TÜM listeview başlıklarını liste görünüm türünden bağımsız olarak geçersiz kılıyor.

Uygulamamda birçok liste görünümünü kullandığım için bunu üçüncü ve daha esnek bir şekilde gerçekleştirmek istiyorum; GridView.ColumnHeaderContainerStyle bir ListView stili içinden ayarlayarak. Bu şekilde, her GridView'deki başlık stiline başvurmam gerekmeyecek.

<Window.Resources> 
    <Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle"> 
     <Setter Property="Background" Value="Wheat" /> 
    </Style> 

    <Style TargetType="{x:Type list:MyListView}"> 
     <Setter Property="GridView.ColumnHeaderContainerStyle" Value="{StaticResource MyHeaderStyle}" />    
     <Setter Property="Background" Value="Linen" />         
    </Style> 
</Window.Resources> 

<list:MyListView> 
    <list:MyListView.View> 
     <GridView> 
      <GridViewColumn Header="Column1" /> 
      <GridViewColumn Header="Column2" /> 
     </GridView> 
    </list:MyListView.View> 
</list:MyListView> 

Bu maalesef başlık stili ayarlamak gelmez yukarıdaki XAML bu değişikliği yaparsanız, çalışıyor ...:

<GridView ColumnHeaderContainerStyle="{StaticResource MyHeaderStyle}"> 

Herhangi Burada şimdiye kadar XAML basitleştirilmiş bir sürümüdür fikir?

cevap

6

Teşekkür Beni doğru yönde işaret etmek için snurre. Tam olarak istediğimi gerçekleştirmenin bir yolunu buldum.

ListView içindeki Kaynaklar bölümünü yerleştirmeniz gerekmez (her ListView için bu tür özel etiketler, ilk etapta kurtulmak istediğim şeydir). Kaynaklar bunun yerine ListView stiline taşınabilir.

<Window.Resources> 
    <Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle"> 
     <Setter Property="Background" Value="Wheat" /> 
    </Style> 

    <Style TargetType="{x:Type list:MyListView}"> 
     <Style.Resources> 
      <Style TargetType="{x:Type GridViewColumnHeader}" BasedOn="{StaticResource MyHeaderStyle}" /> 
     </Style.Resources> 

     <Setter Property="Background" Value="Linen" />         
    </Style> 
</Window.Resources> 

<list:MyListView> 
    <list:MyListView.View> 
     <GridView> 
      <GridViewColumn Header="Column1" x:Name="col1" /> 
      <GridViewColumn Header="Column2" x:Name="col2" /> 
     </GridView> 
    </list:MyListView.View> 
</list:MyListView> 
: Burada

tam olarak bunu istediğiniz biçimde çalışır güncellenen XAML olduğu
3

Anahtar yoksa, belirtilen TargetType öğesinin tüm öğeleri için geçerlidir.

<GridViewColumn HeaderContainerStyle="{StaticResource MyHeaderStyle}" Header="Column1"/> 

Alternatif olarak, sizin ListView içinde stili ayarlamak, bu nedenle sadece içindeki elemanları için de geçerlidir: stil anahtarı varsa, açıkça kullanmak zorunda

<list:MyListView> 
    <list:MyListView.Resources> 
     <Style TargetType="{x:Type GridViewColumnHeader}"> 
      <Setter Property="Background" Value="Wheat" /> 
     </Style> 
    </list:MyListView.Resources> 
</list:MyListView>