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?
Cela fonctionne pour moi:
Window parentWindow = Window.GetWindow(this);
var parent = VisualTreeHelper.GetParent(this);
while (!(parent is Page))
{
parent = VisualTreeHelper.GetParent(parent);
}
(parent as Page).DoStuff();
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;
}
je pense que le meilleur moyen est
var obj = VisualTreeHelper.GetParent((DependencyObject)Content);