2011-12-21 13 views
16

私はプリズムのアプリケーションと様々なモジュールを持っています。私は、スタイル、ブラシ、コントロールテンプレート、データテンプレートなどのリソースを見つけるのに最適な場所はどこですか?WPF Prism - リソースを配置する場所

私は1つのリソース辞書を作成し、そこにすべてを置くべきですか?各モジュールには独自のリソースが必要ですか?または各ビュー?私はすべてのモジュールを維持するというプリズムの目標に従いたいと思いますが、すべてのモジュールで同じリソースを再宣言するという点は見当たりません...

答えて

30

私はプリズムでアプリケーションを開発しています。 Prismのマニュアルに記載されています。あなたは通常、すべての共有のインターフェイスなどを配置YourApplication.Infrastructureプロジェクトは、ありそう:

  1. 私はちょうどテーマのフォルダに
  2. 別のXAMLファイルを作成し、プロジェクトのYourApplication.Resourcesを追加
  3. が作成したフォルダのテーマ各リソースグループ(標準WPFコントロールのスタイル用のGeneric.WPF.xaml、ブラシ用のGeneric.Brushes.xamlなど)
  4. テーマを作成する\ Generic.xaml(正確にこの名前を使用すると、大きな利点が追加されます将来的に)

    などのコンテンツ

    <UserControl.Resources> 
        <ResourceDictionary> 
    
         <ResourceDictionary.MergedDictionaries> 
          <ResourceDictionary Source="pack://application:,,,/YourApplication.Resources;component/Themes/Generic.xaml"/> 
         </ResourceDictionary.MergedDictionaries> 
    
         <!-- Put your not shared resource here --> 
    
        </ResourceDictionary> 
    </UserControl.Resources> 
    
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

    <ResourceDictionary.MergedDictionaries> 

     <ResourceDictionary Source="Generic.Brushes.xaml"/> 
     <ResourceDictionary Source="Generic.WPF.xaml"/> 

    </ResourceDictionary.MergedDictionaries> 

</ResourceDictionary> 
  • は今、あなたはそのプロジェクトにYourApplication.Resourcesへの参照を追加し、あなたのビューのXAMLを追加することにより、任意のモジュール(?あなたは右、それのために別のプロジェクトを持っている)にこれらのリソースを追加することができます

    私には分かりませんが、多分この問題にはいくつかの問題がありますが、うまく動作し、うまく動作します。もし誰かが何とかこの方法(賛否両論)をコメントすることができれば - 私はそれを聞いて非常にうれしい!特定のビューのApp.xamlまたはStartupWindow.xaml

    リソースのいずれかに添加されて、私は通常ResourceDictionaryに入れ

  • +0

    こんにちは:

    <UserControl.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/YourApplication.Resources;component/Themes/Generic.xaml"/> </ResourceDictionary.MergedDictionaries> <!-- Put your not shared resource here --> </ResourceDictionary> </UserControl.Resources> 

    それからちょうどそのようなあなたのBootstrapperApp.xaml<ResourceDictionary/>を宣言することができますこれはちょっと古いことを知っていますが、これにコメントして、これに関連するアドバイスをお願いします。私はこれに似ていて、別のシンプルな名前を試しました。名前と住所は正しいようです。このアプローチを使用するには、コンテナ内に何かを登録するか、初期化のテクニックを実行する必要があります。実行時にリソースアセンブリが見つかりませんでしたか?プリズム4.1、ありがとう。 – LastBye

    +1

    @Sypress実際にこの方法はPrismから何も使用していません。それはPrismのようなものです。埋め込みのWPFおよびXAML機能のみを使用します。どのくらい正確にそれを見つけることができないと言いますか?それはあなたにエラーを表示するか、アセンブリからスタイルを使用しません(おそらくデフォルトのスタイル)? – chopikadze

    +0

    アセンブリを見つけることができませんでした。私はms-build経由でアセンブリを渡しました。問題はなくなりました。 – LastBye

    5

    アプリケーション全体のリソースは、通常、ビューで配置されています。たとえば、CalendarViewに使用されているUserControlには、カレンダー固有のブラシ、スタイル、テンプレートなど、カレンダーのカスタムリソースがすべて含まれます。

    私は通常、私が今までに行ったことがあれば、モジュールのためにResourceDictionaryを持っています。これは、実行時にアプリケーションのマージされた辞書にロードすることも、モジュールの個々のビューに組み込むこともできます。

    2

    いくつかの新しい知識を共有したいと思います。私は@chopikadzeアプローチを使用しています。そして、それは本当にクールなアプローチです。おかげさまで!あなたは、各コードのこれらの部分を制御するためにすべての時間を書きたくない場合

    しかし、:

    <Application.Resources>   
        <ResourceDictionary Source="pack://application:,,,/YourApplication.Resources;component/Themes/Generic.xaml"/> 
    </Application.Resources> 
    
    関連する問題