我有以下简化的代码来为我的DataGrid的某些行着色。我想以编程方式执行此任务,而不是通过XAML。
public IEnumerable<System.Windows.Controls.DataGridRow> GetDataGridRows(System.Windows.Controls.DataGrid grid)
{
var itemsSource = grid.ItemsSource as IEnumerable;
if (null == itemsSource) yield return null;
foreach (var item in itemsSource)
{
var row = grid.ItemContainerGenerator.ContainerFromItem(item) as System.Windows.Controls.DataGridRow;
if (null != row) yield return row;
}
}
public void color()
{
var rows = GetDataGridRows(dg1);
foreach (DataGridRow r in rows)
{
//DataRowView rv = (DataRowView)r.Item;
//remove code for simplicity
r.Background = new SolidColorBrush(System.Windows.Media.Color.FromArgb(100, 100, 100, 100));
}
}
执行此操作不会更改行的背景。
答案 0 :(得分:1)
除非您在DataGrid
中显示很少的行或禁用UI虚拟化(这当然可能会导致性能问题),否则这将无效。
更正WPF中DataGrid
行的背景颜色的正确方法是定义RowStyle
,最好是在XAML中:
<DataGrid x:Name="grid">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Background" Value="#64646464" />
</Style>
</DataGrid.RowStyle>
</DataGrid>
尝试按原样“转换”Windows窗体代码肯定是一种错误的方法。 WPF和Windows窗体是两种不同的框架/技术,并且在两者中都不会以相同的方式执行操作。那么首先进行转换将毫无用处。