2011-08-23 66 views

回答

6

PopupRootinternalPresentationFramework,所以你不能从你的程序集访问它。您可以将类型名称与GetType().FullName进行比较,但PopupRoot是可以在未来的框架版本中更改的实现细节,因此我不会依赖它。

+0

所有这一切都告诉我,我需要一个更通用的解决方案。 –

2

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