C# 基于WPF中的列名及其值的DataTriggers
我有一个C# 基于WPF中的列名及其值的DataTriggers,c#,wpf,C#,Wpf,我有一个DataGrid,它在代码中用DataTable自动生成它的列。 如果X列的值为FALSE或其他值,我需要更改行的背景色。 我可以用AutoGeneratingColumn=“OnAutoGeneratingColumn”eventargs来完成吗? 如果没有,我如何使用DataTriggers访问列值并影响行的背景色来更改行的样式 编辑1: 直截了当的问题:如何根据某列上的值更改行的背景色 编辑2: 基于生成列事件,我可以执行以下操作: 编辑3:编码 public static voi
DataGrid
,它在代码中用DataTable
自动生成它的列。
如果X列的值为FALSE
或其他值,我需要更改行的背景色。
我可以用AutoGeneratingColumn=“OnAutoGeneratingColumn”
eventargs来完成吗?
如果没有,我如何使用DataTriggers
访问列值并影响行的背景色来更改行的样式
编辑1:
直截了当的问题:如何根据某列上的值更改行的背景色
编辑2:
基于生成列事件,我可以执行以下操作:
编辑3:编码
public static void OnAutoGeneratingColumn(object sender, System.Windows.Controls.DataGridAutoGeneratingColumnEventArgs e)
{
try {
if (e.PropertyType == typeof(System.DateTime) && e.Column.Header.ToString() != "Data de Registo")
(e.Column as System.Windows.Controls.DataGridTextColumn).Binding.StringFormat = "dd/MM/yyyy";
if (e.PropertyType == typeof(System.DateTime) && e.Column.Header.ToString() == "Data de Registo")
(e.Column as System.Windows.Controls.DataGridTextColumn).Binding.StringFormat = "dd/MM/yyyy HH:mm:ss";
if (e.Column.Header.ToString() == "FT")
{
StringReader stringReader = new StringReader("<Style xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\""
+ " TargetType=\"{x:Type DataGridCell}\">"
+ " <Setter Property=\"Background\" Value=\"Red\"/>"
+ " </Style>");
XmlReader xmlReader = XmlReader.Create(stringReader);
Style style = (Style)System.Windows.Markup.XamlReader.Load(xmlReader);
e.Column.CellStyle = style;
}
}
catch (Exception) { }
}
AutoGeneratingColumn(对象发送方,System.Windows.Controls.DataGridAutoGeneratingColumnEventArgs e)上的公共静态无效
{
试一试{
if(e.PropertyType==typeof(System.DateTime)和&e.Column.Header.ToString()!=“数据注销”)
(如System.Windows.Controls.DataGridTextColumn.Binding.StringFormat=“dd/MM/yyyy”;
if(e.PropertyType==typeof(System.DateTime)和&e.Column.Header.ToString()==Data de Registo)
(如System.Windows.Controls.DataGridTextColumn.Binding.StringFormat=“dd/MM/yyyy HH:MM:ss”;
if(例如,Column.Header.ToString()=“FT”)
{
StringReader StringReader=新StringReader(“”)
+ " "
+ " ");
XmlReader=XmlReader.Create(stringReader);
Style Style=(Style)System.Windows.Markup.XamlReader.Load(xmlReader);
e、 Column.CellStyle=样式;
}
}
捕获(异常){}
}
因此,我更改了列(其单元格)的背景色,但我想检查每行的值,如果值为X,则为红色;如果值为Y,则为绿色。对
数据网格使用样式和数据触发器
。然后根据绑定的数据项进行格式化
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=<!--Your property name here-->}"
Value="False">
<Setter Property="Background" Value="<!-- Your desired Brush here-->" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
很抱歉,删除了它。。。那不是计划在这里的:-)你救了我的命。非常感谢。每次我使用“绑定路径”时,我指的是datagrid引用的对象,对吗?当您将样式设置为DataGridRow
(因此datagrid.RowStyle
)时,它将使用该行的DataContext
。该行的DataContext
是由DataGrid
逻辑实际绑定的DataTable的行[i]
。