2012-09-15 35 views
5

我想從現有ItemsControl對象確定ItemContainer類型。如何獲得一般ItemContainer類型WPF ItemsControl的

var item = control as ItemsControl; 
    //HOW to get child container Type? 

實施例共混物如何做到這一點:

enter image description here

共混物以某種方式確定當前TabControl類型的子項是TabItem

如何做同樣的事情在代碼?

回答

8

有從ItemsControl派生大多數類一StyleTypedPropertyAttribute。獲得Property等於"ItemContainerStyle"。該屬性上的StyleTargetType屬性應該爲您提供項目類型。

請注意,你必須要小心不要讓從基類屬性。此外,雖然這適用於大多數類型(TabControlListBox),一些類如DataGrid根本不具有這種屬性註釋。

這裏是我使用的內置框架類型列表:

var _itemsContainerTypeByContainerType = new Dictionary<Type, Type> { 
    { typeof(ComboBox), typeof(ComboBoxItem) }, 
    { typeof(ContextMenu), typeof(MenuItem) }, 
    { typeof(DataGrid), typeof(DataGridRow) }, 
    { typeof(DataGridCellsPresenter), typeof(DataGridCell) }, 
    { typeof(DataGridColumnHeadersPresenter), typeof(DataGridColumnHeader) }, 
    { typeof(HeaderedItemsControl), typeof(ContentPresenter) }, 
    { typeof(ItemsControl), typeof(ContentPresenter) }, 
    { typeof(ListBox), typeof(ListBoxItem) }, 
    { typeof(ListView), typeof(ListViewItem) }, 
    { typeof(Menu), typeof(MenuItem) }, 
    { typeof(MenuBase), typeof(MenuItem) }, 
    { typeof(MenuItem), typeof(MenuItem) }, 
    { typeof(MultiSelector), typeof(ContentPresenter) }, 
    { typeof(Selector), typeof(ContentPresenter) }, 
    { typeof(StatusBar), typeof(StatusBarItem) }, 
    { typeof(TabControl), typeof(TabItem) }, 
    { typeof(TreeView), typeof(TreeViewItem) }, 
    { typeof(TreeViewItem), typeof(TreeViewItem) } 
};