質問

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

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

役に立ちましたか?

解決

パックURI構文をご覧ください。次のようなものが必要です:

<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/>

他のヒント

例、これを15秒の回答にするために-

<!> quot; styles.xaml <!> quot;があるとします。 <!> quot; common <!> quotという名前のWPFライブラリ内メインアプリケーションプロジェクトから使用する場合:

  1. メインプロジェクトから<!> quot; common <!> quot;への参照を追加します。プロジェクト
  2. app.xamlには以下が含まれている必要があります:

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

乾杯

.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

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

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

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

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

これを行うときは、 siteOfOriginに注意することをお勧めします。 も同様です。

  

WPFは、application:///およびsiteoforigin:///の2つの機関をサポートしています。   application:///権限は、アプリケーションデータファイルを識別します。   リソースファイルとコンテンツファイルを含むコンパイル時に知られています。の   siteoforigin:///機関は、起点サイトファイルを識別します。スコープ   次の図に、各機関の権限を示します。

ここに画像の説明を入力

UWPの場合:

<ResourceDictionary Source="ms-appx:///##Namespace.External.Assembly##/##FOLDER##/##FILE##.xaml" />

XAMLの使用:

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

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

出力:プロジェクトResourceDictionaryRD1.xaml WpfControlLibrary1StackOverflowAppプロジェクトに使用する場合。

プロジェクトの構造

プロジェクトの構造

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

コード出力:

出力

PS:すべてのBuild Actionファイルには、「Resource」または「Page」として<=>が必要です。

C#の使用:

  

誰かが純粋に c#コード でソリューションを望んでいるなら、私の

scroll top