リソース ディクショナリのマージに問題がある WPF .net 4.5 アプリケーションがあります。
This SO questionおよびThis Questionとまったく同じ問題がありますが、受け入れられた解決策はうまくいきません。
次のように app.xaml で宣言されたリソース ディクショナリがあります (わかりやすくするために簡略化しています)。
<Application.Resources>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Skin/ResourceLibrary.xaml" />
<ResourceDictionary Source="Skin/Brushes/ColorStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
問題: app.xaml にリストされている場合、アプリは ColorStyles ディクショナリを「表示」できますが、ResourceLibrary.xaml 内に移動またはネストすると、ColorStyles.xaml はアプリによって「表示」されず、静的リソースの欠落に関するエラーが発生します。現れる。
ResourceLibrary.xaml ディクショナリを作成する方法は次のとおりです (簡略化)。
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<!-- BRUSHES AND COLORS -->
<ResourceDictionary Source="Brushes/ColorStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
変更の理由:リソース ディクショナリの現在の編成はひどく、変更する必要があります (オブジェクトを複数回作成しているため)。「Skin」フォルダーに 1 つのリソース ディクショナリを配置し、次に app.xaml で呼び出される ResourceLibrary.xaml ファイルにすべてマージされる残りのスタイル ディクショナリを整理するためのサブフォルダーを作成したいと考えていました。
私が試したこと: はい、上記のリンクのソリューションを使用しようとしました:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Skin/ResourceLibrary.xaml"/>
</ResourceDictionary.MergedDictionaries>
<!-- Dummy Style, anything you won't use goes -->
<Style TargetType="{x:Type Rectangle}" />
</ResourceDictionary>
</Application.Resources>
しかし、ダミーのスタイル行で次のエラーが発生します。
エラー 2 プロパティ要素を要素のコンテンツの途中に配置することはできません。コンテンツの前後に配置する必要があります。
コードを次のように変更すると、lisp コメントのおかげで上記のエラーが解消されました。
<Application.Resources>
<ResourceDictionary>
<!--Global View Model Locator-->
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
<!-- Dummy Style, anything you won't use goes -->
<Style TargetType="{x:Type Rectangle}" />
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Skin/ResourceLibrary.xaml"></ResourceDictionary>
<ResourceDictionary Source="Skin/Brushes/ColorStyles.xaml" />
<ResourceDictionary Source="Skin/NamedStyles/AlertStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
しかし、リソース ライブラリはまだ呼び出されていません。
また、すべてのファイル パスを変更して URI をパックしようとしましたが、それでも問題は解決しませんでした。
resourceLibrary.xaml と他のリソース ディクショナリを別のクラス ライブラリ プロジェクトに移動しようとしました (上記と同じフォルダー構造とファイルを使用)。次に、次の URI を使用しましたが、ResourceLibrary.xaml ファイルで宣言されたリソースにアクセスできません。
<ResourceDictionary Source="pack://application:,,,/FTC.Style;component/ResourceLibrary.xaml" />
ただし、上記の UIR 形式を使用して各リソース ディクショナリを App.Xaml ファイルに追加すると、リソースを使用できるようになります。
エラーはなくなりましたが、ResourceLibrary.xaml ファイルのマージされたディクショナリの一部であるリソースをまだ使用できません。このアプローチを使用する必要があるかどうかについては、dowhilefor のコメントに同意する傾向がありますが、この問題に対する最も一般的な解決策 (この投稿の上部にあるリンクを参照) が機能していない可能性があるため、これを理解したいと考えています。この解決策は他の誰かを助けることができます。
質問: ResourceLibrary.xaml ファイルが無視されるのはなぜですか?