2

WPF オブジェクト階層の奥深くで、Window オブジェクトを作成します。

ただし、このウィンドウ オブジェクトの所有者をベースの Window オブジェクトにしたいと考えています。

次のタイプのコードで「ツリーを登る」ことを試みましたが、このアプローチは最適ではないようです。

(((((((TabGroupPane)((ContentPane) this.Parent).Parent).Parent as
SplitPane).Parent as DocumentContentHost).Parent as 
XamDockManager).Parent as ContentControl).Parent as 
StackPanel).Parent...

ベース Window オブジェクトにアクセスするにはどうすればよいですか?

私はこのようなことを考えています:

疑似コード:

Window baseWindow = this.BaseParent as Window;
4

2 に答える 2

2

An approach that works for all types is to walk up the logical tree until you find a node of the type required:

Window baseWindow = FindLogicalParent<Window>(this);

That method doesn't exist in the framework, so here's an implementation:

internal static T FindLogicalParent<T>(DependencyObject obj)
   where T : DependencyObject
{
    DependencyObject parent = obj;
    while (parent != null)
    {
        T correctlyTyped = parent as T;
        if (correctlyTyped != null)
            return correctlyTyped;
        parent = LogicalTreeHelper.GetParent(parent);
    }

    return null;
}

For Window specifically, you can use:

Window.GetWindow(this);
于 2009-09-18T12:22:51.967 に答える
0

これに答えさせてください:

Window baseWindow = Application.Current.Windows[0];
于 2009-09-18T12:04:27.247 に答える