Come posso accedere al genitore di base di un oggetto in una gerarchia WPF?
Domanda
Nel profondo del mio oggetto WPF hiearchy creo un oggetto Window.
Tuttavia, voglio che il proprietario di questo oggetto Window sia l'oggetto Window di base .
Ho provato " arrampicandomi sull'albero " con il seguente tipo di codice ma questo approccio sembra non ottimale :
(((((((TabGroupPane)((ContentPane) this.Parent).Parent).Parent as
SplitPane).Parent as DocumentContentHost).Parent as
XamDockManager).Parent as ContentControl).Parent as
StackPanel).Parent...
Come posso accedere all'oggetto Window di base?
Sto pensando a qualcosa del genere:
pseudo-codice:
Window baseWindow = this.BaseParent as Window;
Soluzione
Un approccio che funziona per tutti i tipi è camminare sull'albero logico fino a trovare un nodo del tipo richiesto:
Window baseWindow = FindLogicalParent<Window>(this);
Questo metodo non esiste nel framework, quindi ecco un'implementazione:
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;
}
Per Window
in particolare, puoi usare:
Window.GetWindow(this);
Altri suggerimenti
Mi permetta di rispondere a questo:
Window baseWindow = Application.Current.Windows[0];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow