2010-08-06 15 views
23

sto ottenendo il seguente errore:XAML: La proprietà 'Risorse' è impostato più di una volta

The property 'Resources' is set more than once.

Ecco il mio 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> 

risposta

47

Il .Resources proprietà in XAML è intelligente: il suo tipo ResourceDictionary ma, se non si mette in modo esplicito un tag <ResourceDictionary> intorno al suo contenuto, il compilatore magicamente assumere uno per voi. Ecco perché di solito puoi semplicemente mettere i tuoi pennelli direttamente nel markup.

Tuttavia, hai iniziato inserendo il tuo ResourceDictionary - che sospetto abbia impedito tale comportamento automatico - e quindi il compilatore ora pensa che tu stia cercando di impostare più di un valore. Se si riscrive come questo si dovrebbe ottenere il risultato che stai dopo:

<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

Funziona, ma non capisco perché sia ​​necessario che i convertitori siano l'ultimo elemento in , ma non ci sono problemi con il primo. –

+1

Nel tuo esempio non sono affatto nel "ResourceDictionary". Penso che l'elemento 'MergedDictionaries' debba essere il primo o l'ultimo, ma a parte questo l'ordine non ha importanza. –

+3

Questa frase vale il suo peso in oro: "se non si specifica esplicitamente un tag attorno al suo contenuto, il compilatore ne assumerà magicamente uno per te" - grazie mille. –

0

In realtà, la copia del XAML e incollandolo nel mio UserControl funziona bene (purché aggiungo le classi del convertitore di riferimento).

Stai vedendo altri errori nella tua lista errori, o è questa l'unica? A volte, se si verifica un altro errore (come l'impossibilità di trovare una risorsa), potrebbe verificarsi un altro errore di compilazione.

+0

errore elementi proprietà non può essere nel bel mezzo di contenuto di un elemento. Devono essere prima o dopo il contenuto. –

Problemi correlati