我是WPF的新手,也许会问一些愚蠢的问题。然而。
我有一个自定义类(WidgetDescriptor)派生类(MenuDescriptor,LabelDescriptor,ButtonDescriptor,SelectDescriptor)的树。派生类提供特定于类型的属性(SelectDescriptor描述下拉列表并具有属性Items,而ButtonDescriptor具有属性Text和Image)。
WidgetDescriptor有一个属性Children,它是WidgetDescriptor实例的可观察集合。
因此,应用程序主菜单是MenuDescriptor实例的树,其中ButtonDescriptor实例为叶子。工具栏可能包含SelectDescriptor(下拉框)等
我想知道是否可以将WPF控件映射到具有绑定的描述符类型? 我希望WPF检查WidgetDescriptor派生类类型并创建特定控件?当然,在这些层次结构中。
答案 0 :(得分:1)
有一些内置功能,每个DataTemplate
都有一个DataType
,如果设置为您的对象类型并且DataTemplate
放在Resources
中1}}没有键的字典如果在数据源中遇到该类型的对象,它将自动被使用。
对于您的菜单,您可以创建一组模板:
<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>
对树木使用hierarhical,它们为项目的子项提供内部ItemsSource
。虽然对于菜单树有多个类似乎是多余的,但是叶子也可以是MenuDescriptors
,尽管没有任何子代(正常MenuItems
的情况)。