XAML - XmlParseExceptionを投げMergedDictionaries「の項目が既に追加されています」。どうして?

StackOverflow https://stackoverflow.com/questions/2040804

質問

私は、次の、再現することが非常に簡単に問題を抱えています: 私は別のファイルからリソースを使用するXAMLアプリケーションを作成しています。

:移動するための方法はこのように、ローカルとグローバルリソースをマージするMergedDictionariesタグを作成することです
<Window>
<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="path.to.xaml.file"/>
            <ResourceDictionary>
                <Style TargetType="{x:Type Border}" x:Key="TypeBlock">

                </Style>
                <Style TargetType="{x:Type Border}" x:Key="SetBlock">

                </Style>
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>
....
</Window>

あなたがそれを実行した場合、コードのこの小さな作品はクラッシュします。

Item has already been added. Key in dictionary: 'System.Windows.Controls.Border'  Key being added: 'System.Windows.Controls.Border'
我々はMergedDictionariesタグを削除する場合、期待どおり

、コードが実行されます:

<Window>
<Window.Resources>
    <Style TargetType="{x:Type Border}" x:Key="TypeBlock">

    </Style>
    <Style TargetType="{x:Type Border}" x:Key="SetBlock">

    </Style>
</Window.Resources>
</Window>
それは我々がマージされたリソースを使用して例外をスローする理由

私は理解していません。 オフコース、修正が(低いレベルにリソースを移動します)今のところ十分に簡単です。それは、これが「正常な」行動であるかどうかを知るためにいいだろう...

役に立ちましたか?

解決

あなたのリソースが別のファイルに配置されていない場合は、

、それらはマージされた辞書の一部であってはなりません。このように外にそれらを移動します:

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="path.to.xaml.file"/>
        </ResourceDictionary.MergedDictionaries>

        <Style TargetType="{x:Type Border}" x:Key="TypeBlock">

        </Style>
        <Style TargetType="{x:Type Border}" x:Key="SetBlock">

        </Style>
    </ResourceDictionary>
</Window.Resources>

エラーメッセージは少し誤解を招くとXAMLコンパイラのバグの結果である可能性があり、言った。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top