2010-08-06 17 views
23

ich die folgende Fehlermeldung erhalten:XAML: Die Eigenschaft ‚Ressourcen‘ wird mehr als einmal

The property 'Resources' is set more than once.

Hier ist meine XAML:

<UserControl.Resources> 
    <!--Resource dictionaries for framework stuff--> 
    <ResourceDictionary> 
     <Style x:Key="MultiLineTextBox" TargetType="TextBox"> 
      <Setter Property="BorderThickness" Value="0"/> 
      <Setter Property="TextWrapping" Value="WrapWithOverflow"/> 
     </Style> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/View;component/Common/ResourceDictionary.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 

    <!--Convertors needed for proper display--> 
    <c:CollapsedIfNegative x:Key="CollapseIfNegative"/> 
    <c:VisibleIfNegative x:Key="MakeVisibleIfNegative"/> 
    <c:ErrorCodeToString x:Key="ConvertErrorCodeToString"/> 
</UserControl.Resources> 

Antwort

47

Die .Resources Eigenschaft in XAML ist clever: es ist Typ ResourceDictionary aber, wenn Sie nicht explizit ein <ResourceDictionary> Tag um seinen Inhalt setzen, wird der Compiler eine magische Weise für Sie übernehmen. Deshalb können Sie Ihre Pinsel normalerweise einfach in das Markup einfügen.

Sie haben jedoch begonnen, indem Sie Ihre eigene ResourceDictionary - was ich vermute, hat dieses automatische Verhalten verhindert - und so der Compiler denkt jetzt, Sie versuchen, mehr als einen Wert zu setzen. Wenn Sie sich so umschreiben sollten Sie das Ergebnis erhalten Sie nach:

<UserControl.Resources> 
    <!--Resource dictionaries for framework stuff--> 
    <ResourceDictionary> 
     <!--Convertors needed for proper display--> 
     <!-- move this INSIDE the ResourceDictionary tag --> 
     <c:CollapsedIfNegative x:Key="CollapseIfNegative"/> 
     <c:VisibleIfNegative x:Key="MakeVisibleIfNegative"/> 
     <c:ErrorCodeToString x:Key="ConvertErrorCodeToString"/> 


     <Style x:Key="MultiLineTextBox" TargetType="TextBox"> 
      <Setter Property="BorderThickness" Value="0"/> 
      <Setter Property="TextWrapping" Value="WrapWithOverflow"/> 
     </Style> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/View;component/Common/ResourceDictionary.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</UserControl.Resources> 
+0

Das funktioniert, aber ich verstehe nicht, warum es problematisch ist, dass die Konverter das letzte Element in sind, aber es ist nicht problematisch, dass sie die Ersten sind. –

+1

In Ihrem Beispiel sind sie nicht im 'ResourceDictionary' enthalten. Ich denke, das Element "MergedDictionaries" muss zuerst oder zuletzt sein, aber ansonsten spielt die Reihenfolge keine Rolle. –

+3

Dieser eine Satz ist sein Gewicht in Gold wert: "Wenn Sie nicht ausdrücklich ein -Tag um seinen Inhalt legen, wird der Compiler auf magische Weise davon ausgehen, dass Sie einen haben" - vielen Dank. –

0

Eigentlich Kopieren XAML und Einfügen in meiner eigenen UserControl-Builds gut (vorausgesetzt, dass ich die referenzierten Konverter-Klassen hinzufügen).

Sehen Sie andere Fehler in Ihrer Fehlerliste oder ist dies die einzige? Wenn ein anderer Fehler auftritt (z. B. wenn eine Ressource nicht gefunden wird), kann es manchmal zu einem weiteren Kompilierungsfehler kommen.

+0

Fehler Property Elemente nicht in der Mitte der Inhalt eines Elements sein kann. Sie müssen vor oder nach dem Inhalt sein. –

Verwandte Themen