大家下午好,
我们的WPF应用程序(VS 2010)上有一个XamDataGrid,我需要以编程方式为一个字段添加一个控件模板(字段总是从我们应用程序的代码中添加)。
因此,我没有在XAML上创建模板,而是通过代码创建它(我跟着几个解释类似问题的帖子),如下所示:
Field f = new Field { Name = name, Label = label, Width = new FieldLength(20) };
Style cellStyle = new System.Windows.Style();
string templateStr = "<ControlTemplate TargetType=\"{x:Type igDP:CellValuePresenter}\">" +
"<Button Content=\"Flu\" />" +
"</ControlTemplate>";
ParserContext pc = new ParserContext();
pc.XmlnsDictionary.Add("", "http://schemas.microsoft.com/winfx/2006/xaml/presentation");
pc.XmlnsDictionary.Add("x", "http://schemas.microsoft.com/winfx/2006/xaml");
pc.XmlnsDictionary.Add("igDP", "http://infragistics.com/DataPresenter");
ControlTemplate ct = (ControlTemplate)XamlReader.Parse(templateStr, pc);
cellStyle.Setters.Add(new Setter() { Property = CellValuePresenter.TemplateProperty, Value = ((object)new CellValuePresenter() { Template = ct }) });
f.Settings.CellValuePresenterStyle = cellStyle;
MainDataGrid.FieldLayouts[0].Fields.Add(f);
不知怎的,这不起作用,我的字段/列都没有显示。所以这不起作用,任何帮助将不胜感激。
答案 0 :(得分:0)
确定!我找到了它!
问题在于我将setter添加到ControlTemplate的方式,而不是:
cellStyle.Setters.Add(new Setter() { Property = CellValuePresenter.TemplateProperty, Value = ((object)new CellValuePresenter() { Template = ct }) });
它应该是这样的:
cellStyle.Setters.Add(new Setter(CellValuePresenter.TemplateProperty, ct));
然后它有效!
我知道这不是最好的方法,但这就是我被要求做的事情。