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