Ответ 1
Это работает для меня:
Window parentWindow = Window.GetWindow(this);
В моем настраиваемом элементе управления WPF я хочу получить содержащее окно или страницу. Метод Window.GetWindow() отлично работает, когда элемент управления находится в оконном приложении, но когда он находится в приложении XBAP в браузере, он возвращает окно браузера вместо страницы.
Есть ли другой способ сделать это?
Это работает для меня:
Window parentWindow = Window.GetWindow(this);
var parent = VisualTreeHelper.GetParent(this);
while (!(parent is Page))
{
parent = VisualTreeHelper.GetParent(parent);
}
(parent as Page).DoStuff();
Вы можете использовать класс VisualTreeHelper для извлечения элемента управления верхнего уровня:
DependencyObject GetTopLevelControl(DependencyObject control)
{
DependencyObject tmp = control;
DependencyObject parent = null;
while((tmp = VisualTreeHelper.GetParent(tmp)) != null)
{
parent = tmp;
}
return parent;
}
Я думаю, лучший способ -
var obj = VisualTreeHelper.GetParent((DependencyObject)Content);