您可以从给定的ItemContainerGenerator获得容器类型吗?

本文关键字:类型 ItemContainerGenerator | 更新日期: 2023-09-27 18:15:37

给定任意的ItemsControl,是否有可能获得其ItemContainerGenerator创建/使用的容器对象的类型?

例如,给定ListBox,我试图获得ListBoxItem类型。对于TreeView,它将是TreeViewItem,等等。

我正试图为任何ItemsControl(或更准确地说,任何利用ItemContainerGenerator的控制)找到通用解决方案。

我特别寻找Type,而不是类型的实例,我也不想依赖于创建一个实例只是为了检查它的类型。

您可以从给定的ItemContainerGenerator获得容器类型吗?

有两种方法:

1)你需要使用反射或表达式树来调用该方法,因为它是受保护的。GetContainerForItemOverride()将返回一个DependencyObject,然后你可以对它使用GetType()。

2)或者你可以调用像treeView.ItemContainerGenerator.ContainerFromIndex(0)之类的东西来获取0项的容器,但这只会在树(或控件)中至少有一个项时才有效。