2009-09-18 5 views
2

Au fond de mon objet WPF hiearchy Je crée un objet Window.Comment puis-je accéder au parent de base d'un objet dans une hiérarchie WPF?

Cependant, je veux le propriétaire de cet objet fenêtre pour être l'objet de la fenêtre de base .

J'ai essayé « monter l'arbre » avec le type de code suivant, mais cette approche semble suboptimale:

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

Comment puis-je accéder à la base de l'objet de fenêtre?

Je pense à quelque chose comme ceci:

PSEUDO-CODE:

Window baseWindow = this.BaseParent as Window; 

Répondre

2

Une approche qui fonctionne pour tous les types sont à remonter l'arbre logique jusqu'à ce que vous trouviez un nœud du type requis:

Window baseWindow = FindLogicalParent<Window>(this); 

Cette méthode n'existe pas dans le cadre, voici donc une mise en œuvre:

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

Pour Window spécifiquement, vous pouvez utiliser:

Window.GetWindow(this); 
0

Permettez-moi de répondre à cette question:

Window baseWindow = Application.Current.Windows[0]; 
+0

Cela suppose que vous avez seulement une fenêtre. –

Questions connexes