WinRT版本DataTemplate
沒有公開Template
屬性。該ContentProperty
被指定爲Template
,所以我試圖改變的是:
[ContentProperty(Name = "MyTemplate")]
但錯誤依然存在:代碼生成試圖添加一個條目爲Template
性質都是一樣的,從XamlTypeInfo.g.cs:
userType.AddMemberName("MyTemplate");
userType.AddMemberName("Template");
要使用不同的內容特性,我們可以使用一個非DataTemplate
子類,並同時定義Template
和DataTemplate
類型的ItemTemplate
;或繼續子類DataTemplate
,實施虛擬Template
屬性,並使用單獨的MyTemplate
屬性託管實際的內容模板。這可能在推送時可用,但不能使模板在DataTemplate
類型屬性中使用。
試圖讓DataTemplate
子類的工作,我嘗試添加object
型Template
屬性:
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文檔:
Framewo rkTemplate具有ContentPropertyAttribute,它指示其XAML內容屬性被命名爲「模板」。 FrameworkTemplate沒有定義該名稱的屬性,也沒有定義具有實際用法的派生類型(ControlTemplate,DataTemplate)。 FrameworkTemplate的內容是應用模板時應創建的根元素,並且不是對象模型中的常規屬性。當從模板創建內容時,FrameworkTemplate的內容由XAML解析器專門處理。
它看起來不太有希望。
您是否嘗試從Silverlight Toolkit移植一個?我打算在某些時候和TreeView控件一起做。它在Silverlight4 \ Source \ Controls \ Data \ HierarchicalDataTemplate.cs中 –
WinRT中的問題是從DataTemplate繼承一個類。這導致上述錯誤。我希望Silverlight工具包中的HierarchicalDataTemplate也是從DataTemplate繼承的。 – Jawahar