WPF相当于Silverlight"RootVisual"

tob*_*sen 7 c# silverlight wpf

我正在尝试将应用程序从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;
        }
Run Code Online (Sandbox Code Playgroud)

目前我正在使用

Application.Current.MainWindow.FindName("ChoiceCanvas") as Canvas;
Run Code Online (Sandbox Code Playgroud)

但这不起作用,也许是因为ChoiceCanvas位于UserControl而不是MainWindow中?

Jer*_*ill 10

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


Ian*_*kes 1

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

 var canvas = LogicalTreeHelper.FindLogicalNode(
      Application.Current.MainWindow, "ChoiceCanvas") as Canvas; 
Run Code Online (Sandbox Code Playgroud)