Déclencheur de style WPF pour la couleur d'arrière-plan DataGridRow Trumped par AlternatingRowBackground Brush
J'ai un WPF DataGrid qui a un AlternatingRowBackground pinceau. Il est configuré de manière à la couleur de toutes les autres lignes. Je voudrais faire quelque chose sur la souris sur les points saillants de la ligne actuelle. Cependant, le Style Déclencheur semble être de perdre sur les AlternatingRowBackground pinceau. Je reçois la ligne de votre choix de coloration sur le dessus de la souris... mais uniquement sur les lignes qui ne sont pas peints avec de la AlternatingRowBackground pinceau.
Ici est le Style de Windows.Ressources:
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Skins/MainSkin.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<Trigger Property="IsMouseOver"
Value="True">
<Setter Property="Background"
Value="Red" />
<Setter Property="FontWeight"
Value="ExtraBold" />
<Setter Property="Height"
Value="20" />
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
</Window.Resources>
Et voici la grille de données:
<DataGrid Margin="25,15,25,0"
VerticalAlignment="Top"
ItemsSource="{Binding DocumentTypeList}"
AutoGenerateColumns="False"
Height="500"
AlternationCount="2"
FrozenColumnCount="2"
AlternatingRowBackground="{DynamicResource AlternatingRow}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Abbreviation}"
Header="Abbreviation" />
<DataGridTextColumn Binding="{Binding Title}"
Header="Title" />
<DataGridTextColumn Binding="{Binding Fee}"
Header="Fee" />
<DataGridTextColumn Binding="{Binding SpecialInstructions}"
Header="Special Instructions" />
</DataGrid.Columns>
</DataGrid>
Est-il un moyen de déclarer le vainqueur absolu? L'enjeu est celui d'une hiérarchie? Il me semble que la AlternatingRowBackground brosse gagne, car il est directement associé à la plupart des parties spécifiques de la déclaration.
Mise à jour: Ici est la syntaxe correcte, basée sur @Val d'orientation:
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Skins/MainSkin.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<Trigger Property="IsMouseOver"
Value="True">
<Setter Property="Background"
Value="Red" />
<Setter Property="FontWeight"
Value="ExtraBold" />
<Setter Property="Height"
Value="20" />
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="{x:Type DataGrid}">
<Setter Property="AlternatingRowBackground" Value="{DynamicResource AlternatingRow}"/>
</Style>
</ResourceDictionary>
</Window.Resources>
Et la grille de données (moins le AlternatingRowBackground pinceau):
<DataGrid Margin="25,15,25,0"
VerticalAlignment="Top"
ItemsSource="{Binding DocumentTypeList}"
AutoGenerateColumns="False"
Height="500"
AlternationCount="2"
FrozenColumnCount="2">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Abbreviation}"
Header="Abbreviation" />
<DataGridTextColumn Binding="{Binding Title}"
Header="Title" />
<DataGridTextColumn Binding="{Binding Fee}"
Header="Fee" />
<DataGridTextColumn Binding="{Binding SpecialInstructions}"
Header="Special Instructions" />
</DataGrid.Columns>
</DataGrid>
source d'informationauteur Mike L
Vous devez vous connecter pour publier un commentaire.
Ce qui est travaillé pour moi dans le passé avec ce genre de chose, est d'utiliser un setter à l'extérieur de l'déclenche par exemple:
Et enlever la propriété de liaison sur la
DataGrid
lui-même. Bien que j'ai l'habitude de le faire avec des données, des déclencheurs, et n'est généralement pas avec dynamique de ressources de liaisons. Mais encore pourrait être utile à un coupIl y a deux façons de le faire, ni est particulièrement évident. Depuis DataGridRow les transferts (en code) le fond de la propriété de la société mère contrôle DataGrid dans un local de la valeur dans la ligne, comme vous l'avez remarqué, il aura la priorité sur la valeur définie par votre déclencheur.
La première (et la plus simple) est de ne pas utiliser le AlternatingRowBackground ou RowBackground mais au lieu d'utiliser des déclencheurs d'alterner la couleur de fond de Val suggéré. Son exemple n'est pas complet si et ne fonctionnera pas. Le style correct et l'utilisation serait comme suit. Notez que vous devez définir la AlternationCount sur la grille de données ou d'autre les lignes ne sera jamais en alternance index.
La deuxième option est d'utiliser le VisualStateManager. Cela vous donne plus de contrôle sur les visuels différents états, mais il est plus prolixe. Heureusement, il est assez facile de copier le modèle de contrôle par défaut à l'aide de Mélange. La plupart de ce qui suit est inchangé à l'exception de la table de montage séquentiel dans l'Infobulle de l'état et je l'ai mis en fond d'écran sur la selectiveScrollingGrid.
Désolé pour l'écharpe, mais comme je l'ai dit, c'est un peu plus prolixe.