2010-02-07 21 views
7

Estoy intentando portar una aplicación de silverlight a wpf. Desafortunadamente soy nuevo para ambos. ¿Hay un equivalente al siguiente código de Silverlight en WPF?WPF equivalente a Silverlight "RootVisual"

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

Actualmente estoy usando

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

Pero esto no funciona, tal vez porque es algo ChoiceCanvas encuentra en un control de usuario y no en el MainWindow?

Respuesta

1

FindName no funcionará porque Canvas existe en el namescope del UserControl, intente utilizar LogicalTreeHelper en su lugar.

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

No hay propiedad RootVisual en WPF. Por lo que yo entiendo, la "Ventana" es la "raíz". Puede obtener la ventana a la que pertenece cualquier objeto WPF (D.O.) ejecutando el método estático Window myWindow = Window.GetWindow (myControl);

1

La ventana actual es la visual de la raíz.

De MSDN WPF Graphics Rendering Overview:

El raíz visual es el elemento más superior en una jerarquía de árbol visual. En la mayoría de las aplicaciones, la clase base del visualizador de la raíz es Ventana o NavigationWindow. Sin embargo, si hospedara objetos visuales en una aplicación Win32 de , la vista de la raíz sería la visual más alta que tenía en la ventana de Win32. Para obtener más información, consulte el Tutorial: Hosting Visual Objects en una aplicación Win32.

Cuestiones relacionadas