WinRT 版本DataTemplate
没有公共Template
属性。被ContentProperty
指定为Template
,所以我尝试改变它:
[ContentProperty(Name = "MyTemplate")]
但是错误仍然存在:代码生成尝试Template
从 XamlTypeInfo.g.cs 为该属性添加一个相同的条目:
userType.AddMemberName("MyTemplate");
userType.AddMemberName("Template");
要使用不同的内容属性,我们可以使用非子DataTemplate
类并同时定义Template
和ItemTemplate
类型DataTemplate
;或者继续继承DataTemplate
,实现一个虚拟Template
属性,并使用一个单独的MyTemplate
属性来承载实际的内容模板。这可能在推送时可用,但不能允许模板在DataTemplate
类型属性中使用。
试图让一个DataTemplate
子类工作,我尝试添加一个类型的Template
属性object
:
public class HierarchicalDataTemplate : DataTemplate
{
public object Template
{
get { return (object)GetValue(TemplateProperty); }
set { SetValue(TemplateProperty, value); }
}
public static readonly DependencyProperty TemplateProperty =
DependencyProperty.Register("Template", typeof(object), typeof(HierarchicalDataTemplate), new PropertyMetadata(null));
// ItemTemplate...
}
这适用于 Visual Studio 设计器,但不适用于运行时:
<local:HierarchicalDataTemplate x:Key="t1">
<TextBlock Text="SUCCESS" />
</local:HierarchicalDataTemplate>
来自FrameworkTemplate文档:
FrameworkTemplate 有一个 ContentPropertyAttribute,指示其 XAML 内容属性名为“模板”。FrameworkTemplate 没有定义该名称的属性,也没有定义具有实际用途的派生类型(ControlTemplate、DataTemplate)。FrameworkTemplate 的内容是应用模板时应创建的根元素,它不是对象模型中的常规属性。当从模板创建内容时,XAML 解析器会专门处理 FrameworkTemplate 的内容。
看起来不太有希望。