用触发器绑定WPF Datagrid单元格背景颜色
我希望WPF数据网格单元格的背景颜色在内容被修改时改变颜色。 每个单元格后面都有一个ViewModel对象,其中包含以下属性 - 值,原始值和修改。 当用户编辑单元格内容时,这会通过数据绑定自动触发Amount属性。 然后,此属性设置器将其与原始值进行核对,并分别将布尔值Modified属性设置为true或false,通知要更新的属性的绑定。
到目前为止,我已经通过DataGridTextColumn的ElementStyle属性的Style实现了部分结果,如下所示
<Style x:Key="DataGridTextStyle" TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=MyViewModel.Modified}" Value="True">
<Setter Property="Background" Value="Yellow"/>
</DataTrigger>
</Style.Triggers>
</Style>
这会更新文本内容的背景颜色,但这只是单元格中心的一个小区域。 我希望整个单元格更新它的背景颜色,而不仅仅是textblock属性。
我可以修改上述触发器在可视树中向上搜索以查找父DataGridCell并设置Background属性,而不是仅设置当前文本块的背景颜色?
您需要将CellStyle
设置为定位DataGridCell
而不是仅限TextBlock
。
如果您希望将此dataTrigger应用于您的dataGrid中的所有单元格,请在DataGrid CellStyle
上设置样式,否则,您也可以在特定的DataGridTextColumn CellStyle
上设置样式。
数据网格
<DataGrid>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding MyViewModel.Modified}"
Value="True">
<Setter Property="Background" Value="Yellow"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>
DataGridTextColumn
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding MyViewModel.Modified}"
Value="True">
<Setter Property="Background" Value="Yellow"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
其他人可能受益于此代码隐藏方法中的WPF“动态数据触发器”
此代码允许用户使用他们想要的指定文本突出显示数据行。
var st = new Style();
st.TargetType = typeof(DataGridRow);
var RedSetter = new Setter( DataGridRow.BackgroundProperty, Brushes.Red);
var dt = new DataTrigger(){
Value = CurrentTextToFilter,
Binding = new Binding("Value")
};
dt.Setters.Add(RedSetter);
st.Triggers.Add(dt);
XDG.RowStyle = st;
PropChanged("MainDataCollection");
parm CurrentTextToFilter用户输入到绑定到后面代码的XAML Textbox.Text属性中的文本。
变量XDG是datagrid XAML名称,RowStyle设置为新样式。
上一篇: Binding WPF Datagrid cell background colour with trigger
下一篇: WPF change Button Content on ViewModel.PropertyChanged event