C#WPF数据网格行背景颜色

时间:2017-08-24 09:34:58

标签: c# wpf datagrid

我有以下简化的代码来为我的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));
    }
}

执行此操作不会更改行的背景。

1 个答案:

答案 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窗体是两种不同的框架/技术,并且在两者中都不会以相同的方式执行操作。那么首先进行转换将毫无用处。