Pregunta

En lo profundo de mi objeto WPF hiearchy creo un objeto Window.

Sin embargo, quiero que el propietario de este objeto de ventana sea el objeto de ventana base .

He intentado "subir al árbol" con el siguiente tipo de código, pero este enfoque parece subóptimo :

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

¿Cómo puedo acceder al objeto de la ventana base?

Estoy pensando en algo como esto:

PSEUDO-CODE:

Window baseWindow = this.BaseParent as Window;
¿Fue útil?

Solución

Un enfoque que funciona para todos los tipos es recorrer el árbol lógico hasta que encuentre un nodo del tipo requerido:

Window baseWindow = FindLogicalParent<Window>(this);

Ese método no existe en el marco, así que aquí hay una implementación:

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

Para Window específicamente, puede usar:

Window.GetWindow(this);

Otros consejos

Permítame responder a esta:

Window baseWindow = Application.Current.Windows[0];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top