257

複数の個別のアプリケーションで使用したいリソース ディクショナリ ファイル (MenuTemplate.xaml、ButtonTemplate.xaml など) があります。それらをアプリケーションのアセンブリに追加することもできますが、これらのリソースを 1 つのアセンブリにコンパイルして、アプリケーションがそれを参照できるようにしたほうがよいでしょうか?

リソース アセンブリがビルドされた後、アプリケーションの App.xaml でそれを参照するにはどうすればよいですか? 現在、ResourceDictionary.MergedDictionaries を使用して個々の辞書ファイルをマージしています。アセンブリにそれらがある場合、xaml でそれらを参照するにはどうすればよいですか?

4

7 に答える 7

371

パック URI 構文を確認してください。次のようなものが必要です。

<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/>
于 2008-12-03T20:15:51.097 に答える
100

例として、これを 15 秒の回答にするためだけに -

「common」という名前の WPF ライブラリに「styles.xaml」があり、それをメイン アプリケーション プロジェクトから使用したいとします。

  1. メイン プロジェクトから「共通」プロジェクトへの参照を追加する
  2. app.xaml には以下が含まれている必要があります。

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/Common;component/styles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

于 2010-03-27T10:01:11.500 に答える
39

私は .NET 4.5 を使用していますが、これを機能させることができませんでした... WPF カスタム コントロール ライブラリを使用していました。これは最終的に私のために働いた...

<ResourceDictionary Source="/MyAssembly;component/mytheme.xaml" />

ソース: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/11a42336-8d87-4656-91a3-275413d3cc19

于 2012-04-18T19:09:43.563 に答える
21

リソースのみの DLL はオプションです。ただし、アプリケーションを再コンパイルせずにリソースを変更する場合を除き、必ずしも必要ではありません。共通の ResourceDictionary ファイルを 1 つだけ持つこともオプションです。リソースなどを変更する頻度によって異なります。

<ResourceDictionary Source="pack://application:,,,/
     <MyAssembly>;component/<FolderStructureInAssembly>/<ResourceFile.xaml>"/>

MyAssembly - 拡張子のないアセンブリ名のみ

FolderStructureInAssembly - リソースがフォルダ内にある場合は、フォルダ構造を指定します

これを行うときは、siteOfOriginも認識しておくことをお勧めします。

WPF は、application:/// と siteoforigin:/// の 2 つの機関をサポートしています。application:/// オーソリティは、リソース ファイルやコンテンツ ファイルなど、コンパイル時に認識されるアプリケーション データ ファイルを識別します。siteoforigin:/// オーソリティは、起点ファイルのサイトを識別します。各権限の範囲を次の図に示します。

ここに画像の説明を入力

于 2013-03-30T01:37:00.963 に答える
5

XAML の使用:

assembly他の構造を知っていてresourcesC#コードが必要な場合は、以下のコードを使用します。

 ResourceDictionary dictionary = new ResourceDictionary();
 dictionary.Source = new Uri("pack://application:,,,/WpfControlLibrary1;Component/RD1.xaml", UriKind.Absolute);
 foreach (var item in dictionary.Values)
 {
    //operations
 }

出力:ResourceDictionary RD1.xaml ProjectWpfControlLibrary1をプロジェクトに使用する場合StackOverflowApp

プロジェクトの構造:

プロジェクトの構造

リソース ディクショナリ: リソース ディクショナリ

コード出力:

出力

PS:すべてのResourceDictionaryファイルはBuild Action' Resource' または ' Page' である必要があります。

C# の使用:

純粋なC# コードでソリューションが必要な場合は、私のこのソリューションを参照してください。

于 2016-04-15T12:46:25.867 に答える