C# 动态设置单元格样式的WPF
我需要在WPF中生成一个简单的网格报告 但是,此网格的列和样式规则(如Red if值低于零)在编译时是未知的 像这样的问题有数百个,我一定读过一半以上,但我找不到解决这个问题的方法,这在WinForms中是微不足道的 通过设置ListView的ItemContainerStyle,我成功地设置了整行的样式,但我无法将其集中在单个单元格上 因此,我现在正在尝试CellTemplate方法,但这会引发一个错误{VisualTree中找不到名为“{x:Type ListViewItem}”的子项。}当然,当我使用DisplayMemberBinding时,CellTemplate甚至根本不会被调用 我的转换器在传递值时会获取整行,而不仅仅是单元格的值,因此这可能是有用的信息C# 动态设置单元格样式的WPF,c#,wpf,binding,dynamic,C#,Wpf,Binding,Dynamic,我需要在WPF中生成一个简单的网格报告 但是,此网格的列和样式规则(如Red if值低于零)在编译时是未知的 像这样的问题有数百个,我一定读过一半以上,但我找不到解决这个问题的方法,这在WinForms中是微不足道的 通过设置ListView的ItemContainerStyle,我成功地设置了整行的样式,但我无法将其集中在单个单元格上 因此,我现在正在尝试CellTemplate方法,但这会引发一个错误{VisualTree中找不到名为“{x:Type ListViewItem}”的子项。}当
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;
我在搜索中遇到过DataTemplateSelector,因此如果在没有任何已知XAML的情况下使用这些工具时有有用的参考,我也会非常感激
感谢您提供的帮助。发生此错误是因为{x:Type ListViewItem}是一个字符串。{x:..}表示法是XAML标记扩展,但您没有使用XAML。要在代码中引用列表ListViewItem,请使用typeofListViewItem 另外,您正在尝试将Background属性设置为类型ListViewItem,这没有什么意义。。让我重新阅读并更新这个答案 更新:Setter构造函数不需要第三个参数
希望有帮助 使用WPF工具包的DataGrid是一种解决方案。如果需要更多详细信息,请进行注释。TargetType在本例中采用字符串,而不是类型。此外,您正在尝试将Background属性设置为我在此处看到的类型:第三个参数是targetName,而不是TargetType。样式具有目标类型,setter正在查找“setter用于的子节点的名称”。将在10秒钟内更新答案。嗨,Kieren,如果我不使用第三个参数,将不会设置任何内容。但是,如果我在ListView的ItemContainerStyle中使用完全相同的触发器,那么它会设置好。MyBkConverter只返回一个红色笔刷。