WPF эквивалент Silverlight "RootVisual" - PullRequest
7 голосов
/ 07 февраля 2010

Я пытаюсь портировать приложение с silverlight на wpf. К сожалению, я новичок в обоих. Есть ли эквивалент в следующем коде Silverlight в WPF?

        private static Canvas GetCanvas()
        {
            var uc = Application.Current.RootVisual as UserControl;
            if (uc == null)
            {
                return null;
            }
            return uc.FindName("ChoiceCanvas") as Canvas;
        }

В настоящее время я использую

Application.Current.MainWindow.FindName("ChoiceCanvas") as Canvas;

Но это не работает, возможно, потому что ChoiceCanvas находится в UserControl, а не в MainWindow?

Ответы [ 3 ]

10 голосов
/ 08 февраля 2010

В WPF нет свойства RootVisual. Насколько я понимаю, "Окно" - это "корень". Вы можете получить Window, которому принадлежит любой объект WPF (D.O.), запустив статический метод Window myWindow = Window.GetWindow (myControl);

1 голос
/ 24 февраля 2015

Текущее окно является корневым визуалом.

Из MSDN Обзор визуализации графики WPF :

Корневой визуал является самым верхним элементом в иерархии дерева визуалов. В В большинстве приложений базовый класс корневого визуала либо Window или NavigationWindow. Однако, если вы размещали визуальные объекты в Win32, корневой визуальный элемент будет самым визуальным были хостинг в окне Win32. Для получения дополнительной информации см. Учебное пособие: Размещение визуальных объектов в приложении Win32.

1 голос
/ 08 февраля 2010

FindName не будет работать, потому что Canvas существует в именной области UserControl, попробуйте вместо этого использовать LogicalTreeHelper.

 var canvas = LogicalTreeHelper.FindLogicalNode(
      Application.Current.MainWindow, "ChoiceCanvas") as Canvas; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...