web-dev-qa-db-fra.com

Comment obtenir un objet principal (Fenêtre ou Page) dans WPF?

Dans mon contrôle WPF personnalisé, je souhaite obtenir une fenêtre ou une page contenant. La méthode Window.GetWindow () fonctionne correctement lorsque le contrôle se trouve dans une application fenêtrée, mais lorsqu'il est dans l'application XBAP dans un navigateur, il renvoie la fenêtre du navigateur au lieu de la page.

Y a-t-un autre moyen de faire ça?

29

Cela fonctionne pour moi:

Window parentWindow = Window.GetWindow(this);
60
CompG33k
var parent = VisualTreeHelper.GetParent(this);
while (!(parent is Page))
{
    parent = VisualTreeHelper.GetParent(parent);
}
(parent as Page).DoStuff();
28
Tomislav Markovski

Vous pouvez utiliser la classe VisualTreeHelper pour récupérer le contrôle de niveau supérieur:

DependencyObject GetTopLevelControl(DependencyObject control)
{
    DependencyObject tmp = control;
    DependencyObject parent = null;
    while((tmp = VisualTreeHelper.GetParent(tmp)) != null)
    {
        parent = tmp;
    }
    return parent;
}
6
Thomas Levesque

je pense que le meilleur moyen est

var obj = VisualTreeHelper.GetParent((DependencyObject)Content);
0
user1497142