2010-02-07 24 views
7

Sto provando a eseguire il porting di un'applicazione da silverlight a wpf. Sfortunatamente sono nuovo ad entrambi. Esiste un equivalente al seguente codice Silverlight in 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; 
     } 

Attualmente sto usando

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

Ma questo non funziona, forse perché ChoiceCanvas si trova qualcosa in un UserControl e non nel MainWindow?

risposta

1

FindName non funziona perché la tela esiste nel namescope di UserControl, provare invece a utilizzare LogicalTreeHelper.

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

Non esiste una proprietà RootVisual in WPF. Per quanto ho capito, la "finestra" è la "radice". È possibile ottenere la finestra a cui appartiene qualsiasi oggetto WPF (D.O.) eseguendo il metodo statico Window myWindow = Window.GetWindow (myControl);

1

La finestra corrente è la radice visiva.

Da MSDN WPF Graphics Rendering Overview:

Il radice visiva è l'elemento più in alto in una gerarchia ad albero visuale. Nella maggior parte delle applicazioni della classe , la classe base della vista radice è Window o NavigationWindow. Tuttavia, se stavi ospitando oggetti visivi in ​​un'applicazione Win32 , la visualizzazione radice sarebbe la più visiva visiva che tu stia ospitando nella finestra Win32. Per ulteriori informazioni, consultare il tutorial: Hosting di oggetti visivi in ​​un'applicazione Win32.