我是WPF的新手,可能会问一些愚蠢的问题。然而。
我有一个由我的自定义类(WidgetDescriptor)派生的类(MenuDescriptor、LabelDescriptor、ButtonDescriptor、SelectDescriptor)组成的树。派生类提供特定于类型的属性(SelectDescriptor describes下拉列表并具有属性、Items,而ButtonDescriptor具有属性Text和Image)。
WidgetDescriptor有一个属性Children,它是WidgetDescriptor实例的可观察集合。
因此,应用程序主菜单是一棵以ButtonDescriptor实例为叶子的MenuDescriptor实例树。工具栏可能包含SelectDescriptor (下拉框)等。
我想知道是否可以使用绑定将WPF控件映射到描述符类型?我希望WPF检查WidgetDescriptor派生类类型并创建特定的控件?当然,这些也是层次化的。
发布于 2011-08-14 15:52:32
有一些内置的功能可以做到这一点,每个DataTemplate
都有一个DataType
,如果它被设置为你的对象的类型,并且DataTemplate
被放在一个没有键的Resources
字典中,那么当该类型的对象被封装在数据源中时,它将自动被使用。
因此,对于您的菜单,您只需创建一组模板:
<Menu ItemsSource="{Binding RootList}">
<Menu.Resources>
<HierarchicalDataTemplate DataType="{x:Type obj:MenuDescriptor}"
ItemsSource="{Binding Children}">
<!-- ... -->
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type obj:ButtonDescriptor}">
<!-- ... -->
</DataTemplate>
<!-- ... -->
</Menu.Resources>
</Menu>
对树使用层次结构1,它们为项的子项提供了一个内部ItemsSource
。对我来说,一个菜单树有多个类似乎是多余的,leaves也可以是MenuDescriptors
的,尽管没有任何孩子(就像普通的MenuItems
一样)。
https://stackoverflow.com/questions/7057420
复制