2010-02-07 13 views
7

Ich versuche, eine Anwendung von Silverlight zu WPF zu portieren. Unglücklicherweise bin ich beiden neu. Gibt es einen Gleichwertigen zum folgenden Silverlight-Code in WPF?WPF entspricht Silverlight "RootVisual"

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

Derzeit bin ich mit

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

Aber das funktioniert nicht, vielleicht weil ChoiceCanvas etwas in einem Usercontrol befindet und nicht in der Mainwindow?

Antwort

1

FindName funktioniert nicht, da Canvas im Namescope von UserControl vorhanden ist, versuchen Sie stattdessen LogicalTreeHelper zu verwenden.

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

Es gibt keine RootVisual-Eigenschaft in WPF. Soweit ich verstehe, ist das "Fenster" die "Wurzel". Sie können das Fenster, zu dem jedes WPF-Objekt (D.O.) gehört, abrufen, indem Sie die statische Methode Window myWindow = Window.GetWindow (myControl) ausführen;

1

Das aktuelle Fenster ist das Stammbild.

Von MSDN WPF Graphics Rendering Overview:

Die Wurzel visuellen ist das oberste Element in einer visuellen Baumhierarchie. In meisten Anwendungen ist die Basisklasse des Stammes Visual Window oder NavigationWindow. Wenn Sie jedoch visuelle Objekte in einer Win32-Anwendung hosten, wäre das Stammbild das oberste visuelle Element, das Sie im Win32-Fenster hosten würden. Weitere Informationen finden Sie unter Lernprogramm: Hosten von visuellen Objekten in einer Win32-Anwendung.