数据网格前景色无效

时间:2016-01-28 11:50:51

标签: c# wpf datagrid header foreground

我有一个显示二维数据的简单数据网格。 我在测试项目中尝试过,结果很好。

enter image description here

这是xmal:

<Grid >
<DataGrid Name="dg" Margin="50" FontSize="26" CellEditEnding="dg_CellEditEnding" BeginningEdit="dg_BeginningEdit"  LoadingRow="DataGrid_LoadingRow" EnableRowVirtualization="False"  AutoGeneratingColumn="dg_AutoGeneratingColumn"/>
</Grid>

以及相关的事件代码:

 private void DataGrid_LoadingRow(object sender, System.Windows.Controls.DataGridRowEventArgs e)
{
  e.Row.Header = "R" + ((e.Row.GetIndex()) + 1).ToString();
}

private void dg_AutoGeneratingColumn(object sender, System.Windows.Controls.DataGridAutoGeneratingColumnEventArgs e)
{
  string str = e.PropertyName;
  int num = int.Parse(e.PropertyName);
  e.Column.Header = "C" + (num + 1).ToString();

}

然后我必须将它放在我的真实项目中,这是一个风格化的窗口。

所以我把同样非常简单的xaml(在这里添加背景和前景,我有一个渐变背景),以便xamls是:

<Grid >
<DataGrid Name="dtgNests" Margin="50" FontSize="26" Background="White" Foreground="Black" HeadersVisibility="All" CellEditEnding=" dg_CellEditEnding" BeginningEdit="dg_BeginningEdit"  LoadingRow="DataGrid_LoadingRow" EnableRowVirtualization="False"  AutoGeneratingColumn="dg_AutoGeneratingColumn"/>
</Grid>

效果是:

enter image description here

因此简而言之,FOREGROUND并未在任何部分设置。那就是:

  • 细胞
  • 行标题
  • 列标题

无处可去。 谁能告诉我为什么? 先感谢您 帕特里克

1 个答案:

答案 0 :(得分:1)

在WPF DataGrid中,所有与单元格相关的设计都需要设置为列ElementStyle,它会覆盖网格中的前景集。请尝试以下方法:

在您的XAML资源中:

<Style x:Key="BlackCellStyle" TargetType="{x:Type TextBlock}">
    <Setter Property="Foreground" Value="Black" />
</Style>

AutoGeneratingColumn处理程序中

private void dg_AutoGeneratingColumn(object sender, System.Windows.Controls.DataGridAutoGeneratingColumnEventArgs e)
{
  string str = e.PropertyName;
  int num = int.Parse(e.PropertyName);
  e.Column.Header = "C" + (num + 1).ToString();
  e.Column.ElementStyle = FindResource("BlackCellStyle") as Style;
}

这会将前景直接应用于您的单元格