如何在定义列并添加c#代码时对wpf数据网格的列进行着色?

如何在定义列并添加c#代码时对wpf数据网格的列进行着色?

问题描述:

更具体地说,我使用DataGrid只是一种显示应用程序操作历史的方法。问题在于,对于用户的眼睛来说,识别这些列太困难了。所以我决定在循环颜色中逐一着色列,例如。首先白,蓝二,三白,...如何在定义列并添加c#代码时对wpf数据网格的列进行着色?

由于我不知道WPF标记非常好,我定义和下面的C#的函数对列:

private void generate_columns() 
    { 
     DataGridTextColumn c1 = new DataGridTextColumn(); 
     c1.Header = "Shot number"; 
     c1.Binding = new Binding("shotNum"); 
     c1.Width = 80; 
     dataGrid.Columns.Add(c1); 
     DataGridTextColumn c2 = new DataGridTextColumn(); 
     c2.Header = "Shooter name"; 
     c2.Width = 160; 
     c2.Binding = new Binding("shooter"); 
     dataGrid.Columns.Add(c2); 
     DataGridTextColumn c3 = new DataGridTextColumn(); 
     c3.Header = "shot 1"; 
     c3.Width = 120; 
     c3.Binding = new Binding("shoot1"); 
     dataGrid.Columns.Add(c3); 
     DataGridTextColumn c4 = new DataGridTextColumn(); 
     c4.Header = "shot 2"; 
     c4.Width = 120; 
     c4.Binding = new Binding("shoot2"); 
     dataGrid.Columns.Add(c4); 
     DataGridTextColumn c5 = new DataGridTextColumn(); 
     c5.Header = "shot 3"; 
     c5.Width = 120; 
     c5.Binding = new Binding("shoot3"); 
     dataGrid.Columns.Add(c5); 
     DataGridTextColumn c6 = new DataGridTextColumn(); 
     c6.Header = "Addition"; 
     c6.Width = 180; 
     c6.Binding = new Binding("addition"); 
     dataGrid.Columns.Add(c6); 
     DataGridTextColumn c7 = new DataGridTextColumn(); 
     c7.Header = "Player1 score"; 
     c7.Width = 160; 
     c7.Binding = new Binding("scoreh"); 
     dataGrid.Columns.Add(c7); 
     DataGridTextColumn c8 = new DataGridTextColumn(); 
     c8.Header = "Player2 score"; 
     c8.Width = 160; 
     c8.Binding = new Binding("scoreo"); 
     dataGrid.Columns.Add(c8); 
    } 

其中C1, c2,...,c8是TextColumns,dataGrid是DataGrid的名称。 此外,说在窗口启动时调用generate_columns()函数。

我的问题是,我可以,如果我能做到这样的改变,我应该对上述代码做些什么,以便我可以控制颜色并按照我提到的方式改变颜色?

的帮助或想法的任何位是高度重视

+1

只需在XAML中完成。学习标记。 –

+0

XAML属性与C#属性完全相同,只是它的写法是不同的。例如,您的第一列的XAML版本将为''。看看你需要使用什么? – Rachel

如果你真的想这样做,在C#中,您可以使用设置列的单元格颜色:

c1.CellStyle = new Style(typeof(DataGridCell)); 
c1.CellStyle.Setters.Add(new Setter(BackgroundProperty, new SolidColorBrush(Colors.LightBlue))); 

所以,如果你想要做的交替的颜色,一个快速的方法是:

for (int i = 0; i < dataGrid.Columns.Count; i++) 
{ 
    var desiredColor = new SolidColorBrush(i % 2 == 0 ? Colors.White : Colors.LightBlue); 

    dataGrid.Columns[i].CellStyle = new Style(typeof(DataGridCell)); 
    dataGrid.Columns[i].CellStyle.Setters.Add(new Setter(BackgroundProperty, desiredColor)); 
} 

i % 2 == 0 ?用于交替的颜色为偶数和奇数

+0

非常感谢你的人 –

+0

你能解释一样的行吗? –