Подтвердить что ты не робот

Как получить верхний объект (окно или страницу) в WPF?

В моем настраиваемом элементе управления WPF я хочу получить содержащее окно или страницу. Метод Window.GetWindow() отлично работает, когда элемент управления находится в оконном приложении, но когда он находится в приложении XBAP в браузере, он возвращает окно браузера вместо страницы.

Есть ли другой способ сделать это?

4b9b3361

Ответ 1

Это работает для меня:

Window parentWindow = Window.GetWindow(this);

Ответ 2

var parent = VisualTreeHelper.GetParent(this);
while (!(parent is Page))
{
    parent = VisualTreeHelper.GetParent(parent);
}
(parent as Page).DoStuff();

Ответ 3

Вы можете использовать класс VisualTreeHelper для извлечения элемента управления верхнего уровня:

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

Ответ 4

Я думаю, лучший способ -

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