2013-09-22 5 views
5

特定のコントロールをホストするウィンドウにアクセスする必要があります(次のコードスニペットのthis)。Application.Current.MainWindowとWindow.GetWindow(this)

私のアプリケーションには1つのウィンドウしかないと仮定すると、以下のステートメントのうち、リソース消費が少ないのはどれですか? (?それともこれを行うには良い方法はおそらくあり)

Application.Current.MainWindow

Window.GetWindow(this)

答えて

4

あなたは一つのウィンドウのみを持っている場合は、どちらかのオプションが細かいです - パフォーマンスが賢明それらの間に大きな違いはありません。 Application.Current.MainWindowはWindow.GetWindow()が依存関係プロパティの値にアクセスする間、現在のアプリケーションに格納されているWindow型のフィールドを単に返します。どちらも実行するのに非常にコストがかかりません。

+0

これらの2つの文がプロパティにアクセスしているだけの場合、私が持っていたウィンドウの数はごくわずかです。私は正しいですか? –

+0

正しい。 1つのウィンドウを指し示すことは、アプローチの正確さのためにより多くのことでした。私。複数のウィンドウがある場合は、MainWindowが1つのみ、GetWindow(明らかに)によって異なるウィンドウが返されます。 – Slugart

+0

ええ、私は単一のMainWindowについて知っています。私は、将来の参照のために明確にしたかっただけです。 –

5

必要になるまで最適化しない人もいます。とにかくこの場合、リソースまたはパフォーマンスのペナルティはおそらく最小限に抑えられます。 つまり、おそらく心配する必要はありません。最適化するために他のものがあります。

これは返したり、アプリケーションのメインウィンドウを設定します:あなたは、あなたがする必要があると述べ

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

:コントロールが配置されているウィンドウへの参照を返すために

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

使用この指定されたコントロールをホストするウィンドウにアクセスします。 次に、意味論的に適切なものは次のとおりです。

Window.GetWindow(theDependencyObject);  
+1

URLは便利ですが、私は 'Window'の名前空間を探していました。 var ownerWindow = System.Windows.Window.GetWindow(this); – CRice

関連する問題