c# – 在代码中创建DataTemplate:我可以使用Template属性吗?
我正在尝试将DataTemplateSelector与特定的第三方
WPF网格控件一起使用,并且我无法确定我遇到的问题是否是控件中的错误或我自己对WPF数据的约定缺乏了解模板.
我意识到DataTemplate的普通用例是在XAML中声明它(无论是作为资源还是显式使用它),但是如果我可以在代码中创建模板(特别是C#),我的特定项目将会受益匪浅.而不是在XAML中.我遇到的问题是我的代码创建的DataTemplate使用FrameworkElementFactory作为模板的VisualTree,而XAML创建的模板使用TemplateContent对象作为模板的Template值.我现在可以告诉你,所讨论的网格控件适用于使用模板的模板,但似乎不能很好地使用使用VisualTree的模板. 通过比较,这里是XAML中的一个模板作为我的选择器的一部分: <MySelectorType> <MySelectorType.BooleanTemplate> <DataTemplate> <EditorControl Name="Reserved_Name" /> </DataTemplate> </MySelectorType.BooleanTemplate> </MySelectorType> 以下是我尝试在代码中创建等效模板的方法: var template = new DataTemplate() { VisualTree = new FrameworkElementFactory(typeof(EditorControl)) { Name = "Reserved_Name" } }; 我也试过这样: var template = new DataTemplate() { VisualTree = new FrameworkElementFactory(typeof(EditorControl)) }; template.VisualTree.SetValue(EditorControl.NameProperty,"Reserved_Name"); 这似乎更类似于XAML模板的功能,但似乎根本不起作用(编辑器既不读取也不设置值,至少第一个版本会读取它). 我的代码内模板是否可以使用Template属性而不是VisualTree?根据the documentation,这种类型没有公共API,实例化路径很复杂,但这已经完成了吗?我发现的唯一example在代码中使用了硬编码的XAML,这对我来说并不合适. 解决方法
我不喜欢这种做事方式,但这实际上是推荐的方式,在
FrameworkElementFactory 的文档中可以找到以下内容:
我不知道在代码中使用Template属性的任何简单方法,我可能知道的唯一方法是通过大量反思. 设置名称是一种特殊情况,如果您设置了工厂的Name属性,它应该正确注册,如果不是,您需要手动获取approriate (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |