Hay un StyleTypedPropertyAttribute
en la mayoría de las clases derivadas de ItemsControl
. Obtenga el que tiene Property
igual a "ItemContainerStyle"
. La propiedad StyleTargetType
en este atributo debería darle el tipo de elemento.
Tenga en cuenta que debe tener cuidado de no obtener atributos de la clase base. Además, aunque esto funciona para la mayoría de los tipos (TabControl
, ListBox
), algunas clases como DataGrid
simplemente no se anotan con este atributo.
Aquí está la lista que utilizo para tipos de estructuras integradas:
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) }
};