2012-09-15 8 views
5

Ich möchte ItemContainer Typ von einem vorhandenen ItemsControl Objekt ermitteln.So erhalten Sie allgemeine ItemContainer-Typ für WPF ItemsControl

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

Beispiel, wie Mischung tut dies:

enter image description here

Mischung bestimmt irgendwie, dass die aktuelle TabControl Typ King Artikel TabItem ist.

Wie man dasselbe im Code tut?

Antwort

8

Es gibt einen StyleTypedPropertyAttribute für die meisten von ItemsControl abgeleiteten Klassen. Holen Sie sich die mit Property entspricht "ItemContainerStyle". Die StyleTargetType Eigenschaft für dieses Attribut sollte Ihnen den Elementtyp geben.

Beachten Sie, dass Sie darauf achten müssen, dass Sie kein Attribut von der Basisklasse erhalten. Auch wenn dies für die meisten Typen funktioniert (TabControl, ListBox), werden einige Klassen wie DataGrid einfach nicht mit diesem Attribut versehen. Hier

ist die Liste, die ich für Einbau-Rahmen-Typen verwenden:

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) } 
}; 
Verwandte Themen