WPF相当于Silverlight“RootVisual”

时间:2010-02-07 13:34:43

标签: c# wpf silverlight

我正在尝试将应用程序从silverlight移植到wpf。不幸的是,我是两个人的新手。是否与WPF中的以下Silverlight代码等效?

        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 个答案:

答案 0 :(得分:10)

WPF中没有RootVisual属性。据我所知,“窗口”是“根”。您可以通过运行静态方法Window myWindow = Window.GetWindow(myControl)获取任何WPF(D.O.)对象所属的Window;

答案 1 :(得分:1)

FindName不起作用,因为Canvas存在于UserControl的名称范围内,请尝试使用LogicalTreeHelper。

 var canvas = LogicalTreeHelper.FindLogicalNode(
      Application.Current.MainWindow, "ChoiceCanvas") as Canvas; 

答案 2 :(得分:1)

当前窗口是根目录。

来自MSDN WPF Graphics Rendering Overview

  

root visual 是可视树层次结构中的最顶层元素。在   大多数应用程序,root visual的基类是 Window   或者NavigationWindow。但是,如果您在一个托管视觉对象   Win32应用程序,根视觉将是最顶级的视觉效果   在Win32窗口中托管。有关更多信息,请参阅教程:   在Win32应用程序中托管可视对象。