2013-09-22 13 views
5

Belirli bir denetimi barındıran pencereye (aşağıdaki kod parçacığında this) erişmem gerekiyor.Application.Current.MainWindow vs. Window.GetWindow (this)

Uygulamamda yalnızca bir pencere olduğumu varsayarsak, aşağıdaki ifadelerden hangisi daha az kaynak gerektirir? Performans akıllıca aralarında fazla fark yoktur - eğer sadece o zaman bir pencere var her iki seçenek ise

Application.Current.MainWindow

Window.GetWindow(this)

cevap

4

(? Veya belki de bunu yapmak için daha iyi bir yolu yoktur). Application.Current.MainWindow, Window.GetWindow() bir bağımlılık özelliğinin değerine erişirken, geçerli uygulamada depolanan bir tür Pencere alanı döndürecektir. Ne yürütmek çok pahalı değil.

+0

bu iki ifadenin sadece özelliklerine erişim, o zaman ben pencere sayısı önemsiz olacaktır: Sonra daha uygun anlamsal olduğunu düşünüyorum. Doğrumuyum? –

+0

Doğru. Bir pencereye işaret etmek, yaklaşımın doğruluğu için daha fazlaydı. Yani Eğer birden fazla pencereye sahipseniz, MainWindow sadece bir tane olacaktır, farklı pencereler ise GetWindow tarafından iade edilebilir (açıkçası). – Slugart

+0

Evet, tek MainWindow'u biliyorum. Ben sadece gelecekteki referans için açıklamak istedim. –

5

Bazı insanlar gereken zamana kadar optimizasyon yapmaz. Her neyse, bu durumda kaynak veya performans cezası muhtemelen azdır. Başka bir deyişle, muhtemelen endişelenmenize gerek yok, optimize etmek için başka şeyler olacak.

Bu iade veya Uygulama Esas Pencere ayarlayacaktır: Sen gerektiğini söyledi

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

: Kontrol bulunduğu Window bir başvuru döndürmek için

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

Kullanım bu Belirli bir kontrole ev sahipliği yapan pencereye erişir.

Window.GetWindow(theDependencyObject);  
+1

URL'ler kullanışlıdır, 'Window' ad alanını arıyordum. var ownerWindow = System.Windows.Window.GetWindow (bu); – CRice