2010-07-30 9 views
8

Ho bisogno di aggiungere il codice dietro la classe al Dizionario delle risorse come descritto in this question. (So ​​che questo non è una buona pratica, ma dovrebbe funzionare sulla base delle osservazioni per la domanda legata) .Sono riferimento al codice con x: attributo Classe:Errore xClassNotDerivedFromElement quando si aggiunge il codice dietro al dizionario delle risorse in silverlight

XAML (Resource separato file di dizionario):

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    x:Class="MyNamespace.MyStandardResources"> 
    ... 
</ResourceDictionary> 

CODICE:

using System.Windows; 

namespace MyNamespace 
{ 
    public partial class MyStandardResources : ResourceDictionary 
    { 
     public MyStandardResources() 
     { 
      InitializeComponent(); 
     } 

     //... 
    } 
} 

In questo modo l'eccezione di runtime parser:

errore interno parser: scrittore Object 'xCla ssNotDerivedFromElement '. [Line: xxx Position: xxx] su System.Windows.Application.LoadComponent.

Le risorse sono incluse in App.xaml con tag ResourceDictionary.MergedDictionaries.

+0

Rimuovere il codice di chiamata ma il costruttore dal codice e rimuovere tutte le risorse da Xaml lasciando un dizionario di risorse vuoto. Hai ancora un errore? (Il nome del costruttore "StandardResources" di BTW è un refuso vero?) – AnthonyWJones

+0

Errore di battitura. Ricevo ancora un errore utilizzando la classe vuota e il dizionario delle risorse XAML vuoto. – PanJanek

risposta

6

Si sta tentando di utilizzare questo ResourceDictionary come valore Source di un dizionario unito? Se è così, questo non è supportato. Si ottiene l'errore xClassNotDerivedFromElement, che è un modo strano di indicarlo, ma ecco perché: il valore dell'attributo Source viene tradotto in un modo che fa riferimento a XAML come XAML, non come classe. Il parser XAML apre XAML come una pura azione di caricamento senza il beneficio di alcun precompilare e non può riconciliare la x: Class in quel momento.

5

La x: Class è limitata per i dizionari uniti in App.xaml. Invece si dovrebbe utilizzare la classe definita come codice dietro di risorse App:

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     x:Class="MyNamespace.App" 
     xmlns:view="clr-namespace:MyNamespace"> 

    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <view:MyStandardResources /> 
       .... 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 

</Application> 
+0

Grazie !! Approfondimenti assolutamente dorati! –

0

E 'un peccato che la creazione di codice sottostante per un dizionario risorse significa che ora non è possibile creare un ResourceDictionary utilizzando l'URI al XAML.

ho rimosso il mio code-behind di nuovo, ma ancora ha creato il ResourceDictionary nel codice utilizzando la risposta da questo question+and+answer

In sostanza è solo crea un vuoto ResourceDictionary e impostando il suo Source alla XAML uri nel codice.

Per me, questo ha funzionato meglio perché significa che chiunque può ancora fare riferimento al dizionario delle risorse, se lo desidera, e farlo nel modo "previsto".

Problemi correlati