WPF DataGrid行的前景色在代码后台中的设置

3

我不想使用MVVM,在代码中(在SelectionChanged EventHandler函数中)更改我的datagrid中选定行的前景色,但我找不到可靠的方法。

我的行可以是黑色、蓝色和红色,但根据某些条件显示具有更高优先级的颜色。选择当前行后,我应该从我的优先级列表中删除黑色等颜色。

我有一些类:

public class TempClass{ public string cell1 { get; set; }; public string cell2 { get; set; };}

并且。
TempClass[] collection; 

与我的数据网格绑定:

datagrid.ItemsSource = collection;

有什么想法吗?
1个回答

3
var rowStyle = new Style {TargetType = typeof (DataGridRow)};
rowStyle.Setters.Add(new Setter(ForegroundProperty, Brushes.Green));
var rowTrigger = new Trigger {Property = DataGridRow.IsSelectedProperty, Value = true};
rowTrigger.Setters.Add(new Setter(ForegroundProperty, Brushes.Red));
rowTrigger.Setters.Add(new Setter(BackgroundProperty, Brushes.Orange));
rowStyle.Triggers.Add(rowTrigger);

var cellStyle = new Style {TargetType = typeof (DataGridCell)};
var cellTrigger = new Trigger {Property = DataGridCell.IsSelectedProperty, Value = true};
cellTrigger.Setters.Add(new Setter(ForegroundProperty, Brushes.Red));
cellTrigger.Setters.Add(new Setter(BackgroundProperty, Brushes.Orange));
cellStyle.Triggers.Add(cellTrigger);

datagrid.RowStyle = rowStyle;
datagrid.CellStyle = cellStyle;

谢谢你的回答,但我想在后台代码中更改我的数据表格中“选定”行的前景色。我的行可以是黑色、蓝色和红色,但根据某些条件显示具有更高优先级的颜色。选择当前行后,我应该从我的优先级列表中删除例如黑色。 - artos
我明白了,好的,我已经更新了答案,并提供了一个示例,展示如何在.cs中编写触发器。 - denis morozov
1
非常感谢,样式和Setter都没问题,您能否在您的回答中添加如何访问我的DataGrid中选定的"DataGridRow"呢?因为我有"TempClass []collection;" 和 "datagrid.ItemsSource = collection;"。当我尝试获取所选的"DataGridRow",例如:DataGridRow currentRow = datagrid.SelectedItem as DataGridRow,当前行为空; - artos
啊,关于这个问题,请查看以下链接:https://dev59.com/Bm865IYBdhLWcg3wQMID。 - denis morozov
1
非常感谢Denis Morozov,我不知道获取DataGrid中选定行是如此困难:( - artos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接