我需要在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 :(得分:0)
发生错误是因为“{x:Type ListViewItem}”是一个字符串。 {x:..}表示法是XAML标记扩展名,但您没有使用XAML。要在代码中引用ListViewItem列表,请使用typeof(ListViewItem)
。
哦,你也试图将Background属性设置为ListViewItem类型,这没什么意义..让我重新阅读并更新这个答案..
更新:您不需要Setter构造函数的第三个参数。
希望有所帮助!
答案 1 :(得分:0)
使用WPF Toolkit的DataGrid就是一个解决方案。 (评论是否需要更多细节)。