2011-08-14 26 views
2

我是WPF的新手,也許會問一些愚蠢的問題。然而。我有一個我的自定義類(WidgetDescriptor)派生類(MenuDescriptor,LabelDescriptor,ButtonDescriptor,SelectDescriptor)的樹。派生類提供特定於類型的屬性(SelectDescriptor描述下拉列表並且具有屬性Items,而ButtonDescriptor具有屬性Text和Image)。WPF綁定產生各種控件

WidgetDescriptor有一個屬性Children是WidgetDescriptor實例的可觀察集合。

因此,應用程序主菜單是ButtonDescriptor實例作爲葉子的MenuDescriptor實例的一棵樹。工具欄可能包含SelectDescriptor(下拉框)等

我想知道是否有可能將WPF控件映射到描述符類型與綁定? 我想要WPF檢查WidgetDescriptor派生類的類型並創建特定的控件?當然,這些是分層次的。

回答

1

有一些這方面的內置功能,每個DataTemplateDataType,如果設置到對象的類型和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> 

使用hierarhical的人,他們對項目的孩子們提供了一個內部ItemsSource。對於菜單樹來說,多於一個類似乎是多餘的,但葉子也可以是MenuDescriptors,雖然沒有任何孩子(正常情況下是MenuItems)。