Ensemble GridViewColumnHeader style de l'intérieur d'un ListView style
Dans un de mes projets, j'ai hérité d'une ListView et remplacé le style par la définition d'un nouveau modèle de contrôle. J'ai également remplacé la colonne d'en-tête de style. Jusqu'à présent, j'ai trouvé deux façons de le faire:
1) En définissant un style de clé et de référencement sur le style dans le contrôle GridView:
<Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle">
<Setter Property="Background" Value="Wheat" />
</Style>
<GridView ColumnHeaderContainerStyle="{StaticResource MyHeaderStyle}">
2) Par définition pas une touche style pour le style précédent. Maintenant, je n'ai pas besoin de référence sur le style dans le GridView, MAIS il remplace également TOUTES les listview en-têtes dans mon application indépendante de listview type.
Depuis que j'ai utiliser beaucoup de listviews dans ma demande, je voudrais le faire dans un troisième et de manière plus souple; par le contrôle GridView.ColumnHeaderContainerStyle de l'intérieur une liste de style. De cette façon, je n'aurais pas besoin de faire référence à l'en-tête de style dans chaque GridView. Voici une version simplifiée de la XAML jusqu'à présent:
<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>
Ce n'est malheureusement pas à définir le style d'en-tête... Si je fais cette modification de la XAML ci-dessus, il fonctionne:
<GridView ColumnHeaderContainerStyle="{StaticResource MyHeaderStyle}">
Des idées?
Vous devez vous connecter pour publier un commentaire.
Grâce snurre pour me pointer dans la bonne direction. J'ai trouvé un moyen pour accomplir exactement ce que je voulais.
Vous n'avez pas besoin de placer la section des Ressources au sein de la liste (ce genre de balises personnalisées pour chaque ListView est ce que je voulais en débarrasser en premier lieu). Les Ressources peuvent être déplacés vers la liste de style plutôt.
Voici la mise à jour de XAML qui fonctionne exactement de la façon dont je veux:
Si il n'y a pas de clé, il s'applique à tous les éléments de la
TargetType
. Si votre style est une clé, vous devez l'utiliser de manière explicite:Alternativement, vous pouvez définir le style à l'intérieur de votre
ListView
, de sorte qu'il s'applique uniquement aux éléments à l'intérieur: