2011-08-23 15 views

答えて

6

PopupRootPresentationFrameworkからinternalあるので、あなたのアセンブリからアクセスすることはできません。タイプ名を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); 
} 
関連する問題