图片可以说出千言万语.
当我爬上可视树时,我看到最后一个父类型为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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3009 次 |
| 最近记录: |