2016-01-28 3 views
0

У меня есть простой datagrid, который отображает двумерные данные. Я пробовал это в тестовом проекте, и результат хорош.Цвет переднего плана Datagrid не работает

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

В 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; 
} 

Это будет применяться на переднем плане непосредственно к клеткам