2013-09-22 18 views
5

Ich muss auf das Fenster zugreifen, das ein bestimmtes Steuerelement hostet (this im folgenden Code-Snippet).Application.Current.MainWindow vs. Window.GetWindow (this)

Angenommen, ich habe nur ein Fenster in meiner Anwendung, welche der folgenden Aussagen ist weniger ressourcenintensiv? (Oder gibt es vielleicht einen besseren Weg, dies zu tun?)

Application.Current.MainWindow

Window.GetWindow(this)

Antwort

4

Wenn Sie nur ein Fenster haben dann entweder Option ist in Ordnung - Leistung klug es nicht viel Unterschied zwischen ihnen ist. Application.Current.MainWindow gibt einfach ein Feld vom Typ Window zurück, das in der aktuellen Anwendung gespeichert ist, während Window.GetWindow() auf den Wert einer Abhängigkeitseigenschaft zugreift. Beide sind nicht sehr teuer auszuführen.

+0

Wenn diese beiden Aussagen nur den Zugriff auf Eigenschaften, dann die Anzahl der Fenster hatte ich würde vernachlässigbar sein. Hab ich recht? –

+0

Korrigieren. Das Zeigen des einen Fensters war mehr für die Richtigkeit des Ansatzes. I.e. Wenn Sie mehrere Fenster haben, wird nur eines das MainWindow sein, während verschiedene Fenster von GetWindow (offensichtlich) zurückgegeben werden können. – Slugart

+0

Ja, ich kenne das MainWindow. Ich wollte nur für zukünftige Referenz klären. –

5

Manche Leute optimieren nicht, bis sie gebraucht werden. In diesem Fall ist die Ressourcen- oder Leistungseinbuße wahrscheinlich minimal. Mit anderen Worten, Sie brauchen sich keine Sorgen zu machen, Sie müssen andere Dinge optimieren.

Dies wird zurückkehren oder das Hauptfenster der Anwendung festgelegt:

// http://msdn.microsoft.com/en-us/library/system.windows.application.mainwindow.aspx 
var w = Application.Current.MainWindow;  

Verwenden dieser einen Verweis auf das Fenster zurückzukehren die Steuerung befindet:

// http://msdn.microsoft.com/library/vstudio/system.windows.window.getwindow.aspx 
Window.GetWindow(theDependencyObject); 

Sie sagten, Sie müssen Greifen Sie auf das Fenster zu, das ein bestimmtes Steuerelement enthält. Dann denke ich, dass die geeignetere semantisch ist:

Window.GetWindow(theDependencyObject);  
+1

Die URLs sind nützlich, ich suchte nach dem Namensraum von "Window". var ownerWindow = System.Windows.Window.GetWindow (this); – CRice