数据网格前景颜色不起作用
Datagrid foreground colour not working
我有一个显示二维数据的简单数据网格。
我在测试项目中尝试过,效果不错。
这是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();
}
然后我必须把它放在我的真实项目中,这是一个样式 window。
所以我把同样的很简单 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>
效果为:
所以简而言之,FOREGROUND 没有在任何部分设置。即:
- 细胞
- 行headers
- 列headers
所以无处可去。
谁能告诉我为什么?
先感谢您
帕特里克
在 WPF DataGrid 中,所有与单元格相关的设计都需要设置为 Column 的 ElementStyle
,它会覆盖 Grid 中设置的前景。尝试以下操作:
在您的 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;
}
这会将前景直接应用到您的单元格
我有一个显示二维数据的简单数据网格。 我在测试项目中尝试过,效果不错。
这是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();
}
然后我必须把它放在我的真实项目中,这是一个样式 window。
所以我把同样的很简单 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>
效果为:
所以简而言之,FOREGROUND 没有在任何部分设置。即:
- 细胞
- 行headers
- 列headers
所以无处可去。 谁能告诉我为什么? 先感谢您 帕特里克
在 WPF DataGrid 中,所有与单元格相关的设计都需要设置为 Column 的 ElementStyle
,它会覆盖 Grid 中设置的前景。尝试以下操作:
在您的 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;
}
这会将前景直接应用到您的单元格