2012-08-23 60 views
2

我的用户界面中有一个datagrid。数据表将绑定到它。 数据表的使用可能具有不同的格式,所以我在后面的代码中为网格添加列和绑定值。见下:通过背景代码设置DataGridTextColumn.ElementStyle

for (int iLoop = 0; iLoop < dtGroup.Columns.Count; iLoop++) 
{ 
    DataGridTextColumn dgColumn = new DataGridTextColumn(); 
    dgColumn.Header = dtGroup.Columns[iLoop].ColumnName; 
    dgColumn.Binding = new Binding(dtGroup.Columns[iLoop].ColumnName); 


    this.dgGroupMatrix.Columns.Add(dgColumn); 
} 

我想要的是让网格单元格的背景颜色基于价值。

我可以通过XAML来实现。

<DataGrid.Columns> 
    <DataGridTextColumn Binding="{Binding Path= operation_name}" Header="operation_name"> 
     <DataGridTextColumn.ElementStyle> 
      <Style TargetType="{x:Type TextBlock}"> 
       <Style.Triggers> 
        <Trigger Property="Text" Value="V31"> 
         <Setter Property="Background" Value="LightGreen"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </DataGridTextColumn.ElementStyle> 
    </DataGridTextColumn> 
</DataGrid.Columns> 

但我不能建立在XAML网格的列,该网格的怎么一回事,因为将有不同的格式。

我该怎么办?

回答

3

只是做同样的事情在代码:

for (int iLoop = 0; iLoop < dtGroup.Columns.Count; iLoop++) 
{ 
    DataGridTextColumn dgColumn = new DataGridTextColumn(); 
    dgColumn.Header = dtGroup.Columns[iLoop].ColumnName; 
    dgColumn.Binding = new Binding(dtGroup.Columns[iLoop].ColumnName); 

    Style columnStyle = new Style(typeof(TextBlock)); 
    Trigger backgroundColorTrigger = new Trigger(); 
    backgroundColorTrigger.Property = TextBlock.TextProperty; 
    backgroundColorTrigger.Value = "V31"; 
    backgroundColorTrigger.Setters.Add(
     new Setter(
      TextBlock.BackgroundProperty, 
      new SolidColorBrush(Colors.LightGreen))); 
    columnStyle.Triggers.Add(backgroundColorTrigger); 
    dgColumn.ElementStyle = columnStyle; 

    this.dgGroupMatrix.Columns.Add(dgColumn); 
} 
+0

当我运行它,我得到一个错误“的TextBlock” TargetType的不匹配元素“DataGridCell”被显示的UI之前的类型。我有没有想念? – LIU

+0

我更正了我的错误:'dgColumn.Style = columnStyle'应该是'dgColumn.ElementStyle = columnStyle' –

+0

@ deltonio2 - 请不要在代码中使用变量;我用这个问题的原始代码使它成为可执行文件 –