XAML - XmlParseExceptionを投げMergedDictionaries「の項目が既に追加されています」。どうして?
-
19-09-2019 - |
質問
私は、次の、再現することが非常に簡単に問題を抱えています: 私は別のファイルからリソースを使用する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コンパイラのバグの結果である可能性があり、言った。
所属していません StackOverflow