2013-09-22 11 views
5

Potrzebuję uzyskać dostęp do okna, w którym znajduje się dana kontrolka (this w poniższym fragmencie kodu).Application.Current.MainWindow vs. Window.GetWindow (this)

Zakładając, że w moim zgłoszeniu mam tylko jedno okno, które z poniższych stwierdzeń jest mniej zasobochłonne? (Czy jest tam chyba lepszy sposób to zrobić?)

Application.Current.MainWindow

Window.GetWindow(this)

Odpowiedz

4

Jeśli masz tylko jedno okno, a następnie albo opcja jest w porządku - wydajność mądry nie ma dużej różnicy między nimi. Application.Current.MainWindow po prostu zwróci pole typu Okno, które jest przechowywane w bieżącej aplikacji, podczas gdy Window.GetWindow() uzyska dostęp do wartości właściwości zależności. Żadne z nich nie są zbyt drogie do wykonania.

+0

Jeśli te dwa stwierdzenia są po prostu uzyskiwania dostępu do właściwości, wówczas liczba okien miałem byłby znikomy. Mam rację? –

+0

Prawidłowe. Wskazanie jednego okna było bardziej poprawne dla podejścia. To znaczy. jeśli masz wiele okien tylko jeden będzie MainWindow, podczas gdy różne okna mogą być zwrócone przez GetWindow (oczywiście). – Slugart

+0

Tak, wiem o pojedynczym MainWindow. Chciałem tylko wyjaśnić przyszłe referencje. –

5

Niektóre osoby nie optymalizują się, dopóki nie będą potrzebne. W każdym razie w tej sprawie zasiłek lub kara za wykonanie jest prawdopodobnie minimalna. Innymi słowy, prawdopodobnie nie musisz się martwić, będziesz mieć inne rzeczy do optymalizacji.

ten powróci lub ustawić okna głównego aplikacji:

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

to wykorzystać, aby powrócić odniesienie do okna kontrola jest zlokalizowany:

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

mówiłeś, że trzeba uzyskać dostęp do okna, w którym znajduje się dana kontrolka. Wtedy myślę, że bardziej właściwe jest semantycznie:

Window.GetWindow(theDependencyObject);  
+1

Adresy URL są przydatne, szukałem przestrzeni nazw "okna". var ownerWindow = System.Windows.Window.GetWindow (this); – CRice