图片可以说出千言万语。如何获取System.Windows.Controls.Primitive.PopupRoot类型?
当我爬上了可视化树我看到最后父类型System.Windows.Controls.Pimitives.PopupRoot的
但乳清我尝试实际上使该型VS抱怨它比较不有效。
图片可以说出千言万语。如何获取System.Windows.Controls.Primitive.PopupRoot类型?
当我爬上了可视化树我看到最后父类型System.Windows.Controls.Pimitives.PopupRoot的
但乳清我尝试实际上使该型VS抱怨它比较不有效。
PopupRoot
是internal
到PresentationFramework
,所以你不能从你的程序集访问它。您可以将类型名称与GetType().FullName
进行比较,但PopupRoot
是可以在未来的框架版本中更改的实现细节,因此我不会依赖它。
PopupRoot
是内部的,因此您将无法引用它。但是,如果您使用LogicalTreeHelper
,则如果存在,您将能够找到Popup
。如果没有逻辑父项,LogicalTreeHelper
将返回NULL,因此除了使用VisualTreeHelper
行走可视树之外,还需要使用它。
下面是一个例子,你如何使用它:
var popupRootFinder = VisualTreeHelper.GetParent((DependencyObject)your_visual_element);
while (popupRootFinder != null)
{
var logicalRoot = LogicalTreeHelper.GetParent(popupRootFinder);
if (logicalRoot is Popup)
{
// popup root found here
break;
}
popupRootFinder = VisualTreeHelper.GetParent(popupRootFinder);
}
所有这一切都告诉我,我需要一个更通用的解决方案。 –