2010-01-11 11 views
6

Ich habe das folgende, sehr einfach zu reproduzieren Problem: Ich erstelle eine XAML-Anwendung, die Ressourcen aus einer anderen Datei verwendet. Der Weg zu gehen, ist ein MergedDictionaries-Tag zu erstellen, um die lokalen und globalen Ressourcen zu fusionieren, wie folgt aus:XAML - MergedDictionaries werfen XmlParseException "Element wurde bereits hinzugefügt". Warum?

<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> 

Dieses kleine Stück Code stürzt ab, wenn Sie es ausführen:

Item has already been added. Key in dictionary: 'System.Windows.Controls.Border' Key being added: 'System.Windows.Controls.Border' 

Wenn wir entfernen sie den MergedDictionaries-Tag, läuft der Code wie erwartet:

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

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

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

ich verstehe nicht, warum es die Ausnahme auslöst, wenn wir Eingebunden Ressourcen verwenden. Natürlich ist die Behebung für jetzt einfach (verschieben Sie die Ressourcen auf eine niedrigere Ebene). Es wäre nett zu wissen, ob das "normales" Verhalten ist ...

+1

Weitere Informationen für Benutzer, die nach dieser bestimmten Fehlermeldung suchen: Ich habe dieses Problem beim versehentlichen Verwenden von zwei Stilen mit dem gleichen 'TargetType'- und keinem' x: Key'-Attribut festgestellt. Das Entfernen eines von ihnen (z. B. durch das Zusammenführen seines Inhalts in den anderen) löste dieses Problem für mich. – Jan

Antwort

10

Wenn sich Ihre Ressourcen nicht in einer separaten Datei befinden, sollten sie nicht Teil der zusammengeführten Wörterbücher sein. Bewegen Sie sie außen wie folgt aus:

<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> 

Das heißt, die Fehlermeldung ein wenig irreführend ist und kann ein Ergebnis eines Fehlers in der XAML-Compiler sein.

+0

Ok ich sehe, danke für die Information! – RoelF

Verwandte Themen