2010-07-11 32 views
0

我有一个要求,在WPF中生成一个“报表”,它只是一个网格。WPF动态设计单元格

然而,列和样式规则(例如,“红色如果低于零值”)为该网格是在编译时未知的。

有数百个这样的问题,我必须看过超过半数的人,但我不能找到解决这个要求这将是微不足道的WinForms。

我设法通过设置ListView控件的ItemContainerStyle样式整行,但我不能设法得到这种专注于单个细胞。

因此,我正在尝试CellTemplate方法,但是这会引发错误({"Child with Name '{x:Type ListViewItem}' not found in VisualTree."}),当然当我使用DisplayMemberBinding时,CellTemplate根本就没有被调用。

当它被传递的值越来越整个行,而不仅仅是单元格的值,所以,这可能是有用的信息,我的转换器。

GridView viewLayout = new GridView(); 
for (int i=0; i<columns.Length; i++) 
{ 
    ColumnDisplaySettings col = columns[i]; 
    var g = new GridViewColumn() 
    { 
     Width = col.Width, 
     //DisplayMemberBinding = "[" + i + "]" /* Have to omit this for CellTemplate */ 
    }; 

    if (i == 0) 
    { 
     g.CellTemplate = new DataTemplate(); 
     var t = new DataTrigger(); 
     t.Binding = new Binding("[0]"); 
     t.Value = "0"; 
     var b = new Binding() { Converter = new MyBkColorConverter() }; 
     t.Setters.Add(new Setter(Control.BackgroundProperty, b, 
      "{x:Type ListViewItem}")); /* Error here */ 
     g.CellTemplate.Triggers.Add(t); 
    } 

    viewLayout.Columns.Add(g); 
} 
lv.View = viewLayout; 

我遇到DataTemplateSelectors在我的搜索,因此,如果使用这些没有任何已知的XAML存在一个有用的参考,那么我也能欣赏。

感谢您提供的任何帮助。

回答

0

这个错误是因为发生了 “{X:类型的ListViewItem}” 是一个字符串。 {x:..}表示法是一种XAML标记扩展,但您不使用XAML。要在代码中引用列表ListViewItem,请使用typeof(ListViewItem)

哦也,你试图背景属性设置为一个类型,ListViewItem的,这没有什么意义..让我重新读取和更新这个答案..

更新:不需要Setter构造函数的第三个参数。

希望有帮助!

+0

在这种情况下,TargetType需要一个字符串,而不是一个Type。 – 2010-07-11 14:10:27

+0

'哦,你正在试图设置背景属性为一个类型< - 好吧,非常感谢你得到我想要的东西,所以会喜欢澄清。 – 2010-07-11 14:12:39

+0

我可以在这里看到:http://msdn.microsoft.com/en-us/library/ms587944.aspx第三个参数是“targetName”,而不是“targetType”。 Style有一个目标类型,setter正在寻找'setter的'子节点的名字'。将在10秒内更新答案.. – 2010-07-11 14:12:46

0

使用WPF工具包的数据网格是一种解决办法。 (评论是否需要更多细节)。

相关问题