C# WPF相当于Silverlight“;rootvisuals";

C# WPF相当于Silverlight“;rootvisuals";,c#,wpf,silverlight,C#,Wpf,Silverlight,我正在尝试将应用程序从silverlight移植到wpf。不幸的是,我对这两个人都是新手。WPF中是否存在与以下Silverlight代码等价的代码 private static Canvas GetCanvas() { var uc = Application.Current.RootVisual as UserControl; if (uc == null) {

我正在尝试将应用程序从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位于用户控件中,而不是主窗口中?

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

FindName不起作用,因为画布存在于UserControl的名称范围中,请尝试改用LogicalTreeHelper

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

当前窗口是根可视窗口

从MSDN:

根可视化是可视化树层次结构中最顶层的元素。在里面 在大多数应用程序中,根可视化的基类是窗口 或导航窗口。但是,如果您在 在Win32应用程序中,根可视化将是最直观的 正在Win32窗口中托管。有关详细信息,请参见教程: 在Win32应用程序中托管可视对象