WPF中与Silverlight的"RootVisual"相当的内容是什么?

7

我正在尝试将一个应用程序从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个回答

10

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


1

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

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

1

当前窗口是根视觉元素。

来自MSDN WPF图形渲染概述

根视觉元素是可视化树层次结构中的最顶层元素。在大多数应用程序中,根视觉元素的基类要么是Window,要么是NavigationWindow。但是,如果您在Win32应用程序中托管视觉对象,则根视觉元素将是您在Win32窗口中托管的最顶层视觉对象。有关详细信息,请参阅教程:在Win32应用程序中托管视觉对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接