【发布时间】:2010-09-27 15:47:00
【问题描述】:
鉴于:
- TargetType 无法分配 DataTemplates
- StaticResource 引用只能引用以前
如何在 TreeView 中对以下情况进行模板化?
class Resource {
public string Name {get;}
public IEnumerable<Property> Properties {get;}
}
class Property {
public string Name {get;}
public IEnumerable<Resource> Values {get;}
}
这种结构很适合一棵看起来像这样的树:
Resource 1
|- Property A
| - Resource 2
| - Resource 3
|- Property B
|- Resource 4
由于HierarchicalDataTemplate 的TargetType 属性,这对于WPF 中的模板来说是微不足道的。在 Silverlight 中,我们必须做一些类似的事情:
<HierarchicalDataTemplate x:Key="ResourceTemplate"
ItemSource="{Binding Properties}"
ItemTemplate={StaticResource PropertyTemplate}" />
<HierarchicalDataTemplate x:Key="PropertyTemplate"
ItemSource="{Binding Values}"
ItemTemplate="{StaticResource ResourceTemplate}" />
这显然行不通,因为 ResourceTemplate 不能引用 PropertyTemplate,因为它是在 XAML 文档中定义的。那么,如何解决这个先有鸡还是先有蛋的问题呢?
【问题讨论】:
标签: silverlight xaml resourcedictionary hierarchicaldatatemplate