¿Cómo puedo acceder al padre base de un objeto en una jerarquía WPF?
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;
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