Tengo el siguiente problema, muy fácil de reproducir: Estoy creando una aplicación xaml que utiliza recursos de otro archivo. El camino a seguir es crear un MergedDictionaries-tag para combinar los recursos locales y globales, así:XAML - MergedDictionaries throwing XmlParseException "el elemento ya se ha agregado". ¿Por qué?
<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>
Esta pequeña pieza de código se bloqueará si lo ejecuta:
Item has already been added. Key in dictionary: 'System.Windows.Controls.Border' Key being added: 'System.Windows.Controls.Border'
Si nos quitar el MergedDictionaries-tag, se ejecuta como se esperaba el código:
<Window>
<Window.Resources>
<Style TargetType="{x:Type Border}" x:Key="TypeBlock">
</Style>
<Style TargetType="{x:Type Border}" x:Key="SetBlock">
</Style>
</Window.Resources>
</Window>
no entiendo por qué se produce la excepción cuando usamos Recursos fusionada. Por supuesto, la solución es bastante fácil por ahora (mueva los recursos a un nivel inferior). Sería bueno saber si esto es un comportamiento "normal" ...
Información adicional para las personas que buscan ese mensaje de error específico: Encontré este problema cuando accidentalmente utilizo dos estilos con el mismo 'TargetType' y ningún atributo' x: Key'. Eliminar uno de ellos (por ejemplo, fusionando sus contenidos en el otro) resolvió este problema para mí. – Jan