次の非常に再現しやすい問題があります。別のファイルのリソースを使用する 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>
マージされたリソースを使用すると、例外がスローされる理由がわかりません。もちろん、今のところ修正は簡単です (リソースを下位レベルに移動します)。これが「通常の」動作であるかどうかを知っておくとよいでしょう...