web-dev-qa-db-ja.com

WPFでトップオブジェクト(ウィンドウまたはページ)を取得する方法

私のカスタムWPFコントロール内で、ウィンドウまたはページを含むものを取得したいと考えています。 Window.GetWindow()メソッドは、コントロールがウィンドウアプリにある場合は正常に機能しますが、ブラウザーのXBAPアプリにある場合は、ページではなくブラウザーウィンドウを返します。

これを行う他の方法はありますか?

29

これは私にとってはうまくいきます:

Window parentWindow = Window.GetWindow(this);
64
CompG33k
var parent = VisualTreeHelper.GetParent(this);
while (!(parent is Page))
{
    parent = VisualTreeHelper.GetParent(parent);
}
(parent as Page).DoStuff();
29

VisualTreeHelperクラスを使用して、最上位のコントロールを取得できます。

DependencyObject GetTopLevelControl(DependencyObject control)
{
    DependencyObject tmp = control;
    DependencyObject parent = null;
    while((tmp = VisualTreeHelper.GetParent(tmp)) != null)
    {
        parent = tmp;
    }
    return parent;
}
6
Thomas Levesque

最善の方法は

var obj = VisualTreeHelper.GetParent((DependencyObject)Content);
0
user1497142