2017-06-12 68 views
0

编辑由于缺乏睡眠,我写了函数,我的意思是转换器类。改变了下面的内容,让它更清楚发生了什么。WPF datagrid:如何在C#中设置特定的setter代替XAML

我有,我使用C#功能转换器级SetBrushColor设置上的一些细胞中的背景画笔在一个特定的列中的WPF数据网格。 (使用的颜色取决于单元格中的值。) 这是按预期工作的。 XAML中的相关部分的小摘录:

<Window.Resources> 
    <local:SetBrushColor x:Key="SetBrushColor"/> 
</Window.Resources> 
... 
<DataGridTextColumn Binding="{MyData}"> 
    <DataGridTextColumn.ElementStyle> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Setter Property="Background" Value="{MyData, Converter {StaticResource SetBrushColor}}"/> 
    </Style> 
</DataGridTextColumn.ElementStyle> 

我现在想重新使用同一个C#功能转换器类做同样为DataGrid的新版本这是编程生成的。现在列的数量是可变的,并且带有彩色单元格的列在左右移动。

我可以动态添加列和数据行,没有任何问题到网格。 (在XAML中,我只是从网格中删除了DataGridTextColumn规范,所以我从空的那个开始)

我遇到麻烦的地方是需要将Setter添加到列的ElementStyle属性的地方。我无法弄清楚如何在绑定部分编写相应的语句。 在我的C#代码,我必须得:

... 
DataGridTextColumn myCol = new DataGridTextColumn(); 
myCol.Header = "My Special Column"; 
myCol.Width = 200; 
Style colStyle = new Style(typeof(TextBlock)); 
colStyle.Setters.Add(new Setter(TextBlock.BackgroundProperty, new Binding(<<<what goes here ?>>>))); 
myCol.ElementStyle = colStyle; 
myCol.Binding = new Binding("MyData"); 
dataGrid.Columns.Add(myCol); 
... 

我很新的C#甚至不太有经验与WPF中,但到目前为止,我已经能够找出最事情。
但在这一个我需要一点指导如何做到这一点。

回答

1

试试这个:

colStyle.Setters.Add(new Setter(TextBlock.BackgroundProperty, new Binding("MyData"){ Converter = new SetBrushColor() })); 
+0

我会尝试明天1日的事情,当我回到办公室。可能是我缺乏C#的经验,但使用我的SetBrushColor()函数与“新”像这样看起来非常错误。 – Tonny

+0

SetBrushColor是一个转换器类,不是吗?这不是一种方法。 – mm8

+0

你是对的。我的错。我需要睡眠,不好:-( – Tonny

相关问题