緩いXAMLを使用しています(ビルドアクションなし、ただし常に出力ディレクトリにコピーします)。また、サブフォルダーにあるいくつかのマージされたディクショナリを参照するリソースディクショナリである「ルート」xamlがあります。これは私のフォルダ構造です:
<root>\Root.xaml
<root>\SubFolder1\MergedDict1.xaml
<root>\SubFolder1\MergedDict2.xaml
<root>\SubFolder2\MergedDict3.xaml
<root>\SubFolder2\MergedDict4.xaml
再コンパイルせずにフォルダーにxamlファイルを追加できるようにする必要があります。そのため、緩いxamlsを使用する必要があります。
アプリケーションでルートxamlをロードしますが、マージされた辞書が見つからないという例外が常に発生します。ソースとして相対パスを割り当てるさまざまなバリエーションを試しました。それらのいくつかは次のとおりです。
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="<root>/SubFolder1/MergedDict1.xaml" />
<ResourceDictionary Source="/SubFolder1/MergedDict1.xaml" />
<ResourceDictionary Source="SubFolder1/MergedDict1.xaml" />
<ResourceDictionary Source="./SubFolder1/MergedDict1.xaml" />
<ResourceDictionary Source="../SubFolder1/MergedDict1.xaml" />
...
私の驚いたことに(そして進行中の恐怖)、それらのどれもうまくいきませんでした。
私は自分の正気を疑問視し始めたので、URIを使用して相対パスを生成する小さなテストアプリケーションを作成しました。
System.Uri uri2 = new Uri(@"C:\<root>\SubFolder1\MergedDict1.xaml");
System.Uri uri1 = new Uri(@"C:\<root>");
var r = uri1.MakeRelativeUri(uri2).ToString();
生成された相対パスは、予想どおり、SubFolder1/MergedDict1.xamlでも機能しませんでした。正しい相対パスを取得するための黒魔術を誰が教えてくれますか?