2010-07-30 6 views
8

Ich muss Code hinter Klasse zu Ressource Dictionary wie in this question beschrieben hinzufügen. (Ich weiß, dass dies keine gute Praxis, aber es sollte sich auf die Kommentare für verknüpfte Frage basierte Arbeit) Referenzierung .I'm den Code mit x: Class-Attribut:xClassNotDerivedFromElement Fehler beim Hinzufügen von Code hinter Resource Dictionary in silverlight

XAML (getrennte Ressourcen Wörterbuch-Datei):

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

Code:

using System.Windows; 

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

     //... 
    } 
} 

Dies bewirkt, dass die Laufzeit-Parser Ausnahme:

Parser interne Fehler: Object writer 'xCla ssNotDerivedFromElement '. [Linie: xxx Position: xxx] bei System.Windows.Application.LoadComponent.

Die Ressourcen sind in App.xaml mit dem ResourceDictionary.MergedDictionaries-Tag enthalten.

+0

Entfernen Sie den Code, aber den Konstruktor aus dem Code, und entfernen Sie alle Ressourcen aus dem Xam, wobei ein leeres Ressourcenwörterbuch übrig bleibt. Erhalten Sie immer noch einen Fehler? (BTW "StandardResources" Konstruktorname ist ein Tippfehler?) – AnthonyWJones

+0

Typo korrigiert. Ich bekomme immer noch eine Fehlermeldung mit leerer Klasse und leerem XAML-Ressourcenwörterbuch. – PanJanek

Antwort

6

Versuchen Sie, dieses ResourceDictionary als Quellwert eines zusammengeführten Wörterbuchs zu verwenden? Wenn dies der Fall ist, wird dies nicht unterstützt. Sie erhalten den xClassNotDerivedFromElement-Fehler, der eine seltsame Art ist, ihn anzuzeigen, aber hier ist der Grund: Der Source-Attributwert wird so übersetzt, dass er XAML als XAML und nicht als Klasse referenziert. Der XAML-Parser öffnet dieses XAML als reine Ladeaktion ohne Vorkompilierung und kann die x: -Klasse zu diesem Zeitpunkt nicht abgleichen.

5

Die x: -Klasse ist für zusammengesetzte Wörterbücher in App.xaml eingeschränkt. Stattdessen sollten Sie Ihre Klasse als Code hinter in App-Ressourcen definiert verwenden:

<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

Danke !! Absolut goldene Einsichten! –

0

Es ist schade, dass die Code-Behind-Erstellung für einen Ressource-Wörterbuch jetzt bedeutet, dass Sie nicht ein Resource mit dem URI zum XAML erstellen.

entfernt ich meinen Code-behind wieder, aber erstellt noch die Resource in Code die Antwort von dieser

question+and+answer

mit ihm Grundsätzlich schafft nur ein leeres ResourceDictionary und seine Source zum XAML uri in Code-Einstellung.

Für mich funktionierte das besser, weil es dann bedeutet, dass jeder andere noch das Ressourcenwörterbuch referenzieren kann, wenn sie es wollten, und es den "erwarteten" Weg machen.