Ich habe ein WPF-DataGrid mit einem AlternatingRowBackground-Pinsel. Es ist so konfiguriert, dass es jede zweite Zeile einfärbt. Ich möchte etwas mit der Maus machen, um die aktuelle Zeile zu markieren. Allerdings scheint der Style-Trigger gegenüber dem AlternatingRowBackground-Pinsel zu verlieren. Ich bekomme die gewünschte Zeilenfarbe auf der Maus über ... aber nur auf den Zeilen, die nicht mit dem AlternatingRowBackground-Pinsel gemalt sind. HierWPF-Style-Trigger für DataGridRow-Hintergrundfarbe von AlternatingRowBackground-Pinsel übertrumpft
ist der Stil in Windows.Resources:
<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>
Und hier ist das Datagrid:
<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>
Gibt es eine Möglichkeit, den absoluten Sieger zu erklären? Liegt das Problem an einer Hierarchie? Es scheint mir, dass der AlternatingRowBackground-Pinsel gewinnt, weil er direkt mit dem spezifischsten Teil der Deklaration verknüpft ist.
Update: Hier ist die korrekte Syntax, basierend auf @ Val Führung:
<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>
Und das Datagrid (minus der AlternatingRowBackground Bürste):
<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>
Sie auf jeden Fall mich in die richtige Richtung gehen. Ich habe die Setter-Eigenschaft wie von Ihnen vorgeschlagen hinzugefügt ... nicht zu {x: Type DataGridRow}, sondern als separaten Stil für {x: Type DataGrid}. Das macht den Trick. –
Danke! Nicht sicher, warum das Definieren des AlternatingRowBackground in einem DataGrid-Stil statt in DataGrid.AlternatingRowBackground den Trigger direkt ermöglicht, aber ich bin froh, dass es funktioniert! –