У меня есть простая DatGrid. Я хочу установить цвет фона моих строк в соответствии с указанными c критериями. В этом примере строка в начале просто красная.
Я хочу изменить этот базовый c цвет фона на другие цвета
- , когда мышь наводится на строку
- при выборе строки
- при выборе строки и наведении на нее указателя мыши
Дело в том, что она работает для ячеек, но не для всей строки ,
Я установил MultiTrigger
для последнего требования, и это меняет цвет ячейки, но не цвет всей строки. Когда я перемещаю CellStyle
MultiTrigger
в RowStyle
, он больше ничего не делает.
<Window x:Class="MyWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfTest" >
<Window.DataContext>
<local:MyWindowViewModel />
</Window.DataContext>
<Grid>
<DataGrid ItemsSource="{Binding Items}"
AutoGenerateColumns="False"
SelectionMode="Single" SelectionUnit="FullRow" >
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Background" Value="Red"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Green" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Orange" />
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="True" />
<Condition Property="IsMouseOver" Value="True" />
</MultiTrigger.Conditions>
<Setter Property="Background" Value="Yellow"/>
</MultiTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="FirstName" Width="50*" Binding="{Binding FirstName}" />
<DataGridTextColumn Header="LastName" Width="50*" Binding="{Binding LastName}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
Model / ViewModel:
class Model
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
class MyWindowViewModel
{
public List<Model> Items { get; private set; }
public MyWindowViewModel()
{
Items = new List<Model>();
Items.Add(new Model { FirstName = "AB", LastName = "CD"});
Items.Add(new Model { FirstName = "EF", LastName = "GH" });
Items.Add(new Model { FirstName = "IJ", LastName = "KL" });
}
}