0

緩い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でも機能しませんでした。正しい相対パスを取得するための黒魔術を誰が教えてくれますか?

4

1 に答える 1

0

xamlファイルはすべて同じコンポーネントに含まれているようです。それでも、パックURIを使用すると役立つ場合があります:http://msdn.microsoft.com/en-us/library/aa970069.aspx

于 2012-07-18T12:33:31.537 に答える