我正在尝试使用
我知道一个
为了比较,这是我选择器中一个 XAML 模板的样子:
我也尝试了这种方式:
DataTemplateSelector
与特定的第三方 WPF 网格控件,并且我有困难确定我遇到的问题是控件中的 bug 还是我自己对 WPF 数据模板的惯例理解不够。我知道一个
DataTemplate
的普通用途是在 XAML 中声明它(无论是作为资源还是明确指定它的位置),但是如果我能够在代码(具体来说是 C#)中创建模板,而不是在 XAML 中创建,那么我的特定项目将大有裨益。 我遇到的问题是,我的代码创建的 DataTemplate
使用 FrameworkElementFactory
作为模板的 VisualTree
,而 XAML 创建的模板使用 TemplateContent
对象作为模板的 Template
值。 我目前最好的判断是,所涉及的网格控件适用于使用 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
?根据文档,没有公共API可用于此类型,实例化路径很复杂,但是否已实现?我找到的唯一示例在代码中使用硬编码的XAML,这让我感到不舒服。