2011-12-08 10 views
3

私は現在、いくつかの静的リソースと、それらのリソースを私のウィンドウで使用するスタイルを定義しています。そのマークアップをMainSkin.xamlに移動して、そのスタイルが必要なすべてのウィンドウで参照できるようにしたいと思います。MVVM LightでMainSkin.xamlを使用するには?

単純にマークアップを移動すると、「System.Windows.StaticResourceExtension」の値を提供するという例外が発生します。私はそれが私が参照しているスタイルを見つけることができないと仮定していますか?私はそれをマージする必要があります/何とかそれをリンクしますか?

答えて

7

WPFとSilverlightでは、必要な数のリソースディクショナリを作成できます。これは純粋にリソースの論理的な構成です。外部リソース辞書に追加されてからマージされるリソースは、例えばPage.Resourcesなどのリソースと、Page.Resourcesに直接追加されるリソースの間に違いはありません。

  • グローバルリソースディクショナリ:これらはApp.xamlにマージされ、アプリケーション内のすべてのページ/ウィンドウ/ユーザーコントロールにそれらを自動的に利用できるように

    は実際には、我々は通常、リソースディクショナリの数を定義します。

  • 特定のウィンドウ、ページ/ユーザーコントロールに固有のリソースを含む特定のリソースディクショナリ。

MainSkin.xamlは、MainWindow(名前のとおり)に固有のものとします。これは単なる提案であり、自由に行うことができます;しかし、あなたの場合、複数の場所で使用されているリソースがある場合は、グローバルリソース辞書を作成し、App.xamlにマージしてそこに追加します。

乾杯、 ローラン

+0

おかげローランは、私はすべてのページに適用されStyles.cssをを持って平行に描いたMVVMでのnoobていると思います。 App.xamlのGlobalSkin.xamlのようなものをマージして提案したように、私はそれを達成できると思います。 – e36M3

2

私はそれを理解したように私自身の質問に答えます。 MainSkin.xamlを使用するすべてのページは、そのリソースにマージする必要があります。デフォルトでは、MVVM Lightによって作成されたMainWindowはあなたのために行われますが、併合マークアップを運ぶ必要がある追加のウィンドウがあります。

<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Skins/MainSkin.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 

     <! -- OTHER RESOURCES GO HERE, NOT DIRECTLY UNDER WINDOW.RESOURCES!!! --> 

    </ResourceDictionary> 
</Window.Resources>