私は複数の別々のアプリケーションで使用したいリソース辞書ファイル(MenuTemplate.xaml、ButtonTemplate.xamlなど)を持っています。それらをアプリケーションのアセンブリに追加することもできますが、これらのリソースを1つのアセンブリにコンパイルして、自分のアプリケーションで参照するようにした方が適切です。
リソースアセンブリを構築した後、アプリケーションのApp.xamlでそれを参照する方法を教えてください。現在私はResourceDictionary.MergedDictionariesを使って個々の辞書ファイルをマージしています。アセンブリ内にそれらがある場合、xamlでそれらをどのように参照できますか?
をチェックパックURI構文。あなたはこのようなものが欲しい:
<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/>
AppDomain.AssemblyResolve
それはアセンブリを見つけるのを助けるために。 - Kent Boogaart
例、これを15秒の答えにするために -
"common"という名前のWPFライブラリに "styles.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
構造としたいresources
にc#その後、以下のコードを使用してください。
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
プロジェクトのWpfControlLibrary1
にStackOverflowApp
プロジェクト。
プロジェクトの構成:
コード出力:
シモンズ:すべてResourceDictionary
ファイルは持っているべきですBuild Action
'としてResource
'または'Page
'。
C#を使う:
誰かが純粋に解決策を望んでいる場合C#コードそれから私に会いなさいこの 溶液。