2010-07-30 9 views
8

Necesito agregar el código detrás de la clase al diccionario de recursos como se describe en this question. (Sé que esto no es una buena práctica, pero que debería funcionar en base a los comentarios sobre la pregunta vinculada) .I'm referencia al código con el atributo x: Class:xClassNotDerivedFromElement error al agregar código detrás al diccionario de recursos en silverlight

XAML (recursos independiente archivo Diccionario):

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

CÓDIGO:

using System.Windows; 

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

     //... 
    } 
} 

Esto hace que el tiempo de ejecución excepción analizador:

error interno del analizador: escritor objeto 'xCla ssNotDerivedFromElement '. [Línea: xxx Posición: xxx] en System.Windows.Application.LoadComponent.

Los recursos están incluidos en App.xaml con la etiqueta ResourceDictionary.MergedDictionaries.

+0

Elimina el código de llamada pero el constructor del código y elimina todos los recursos del Xaml dejando un diccionario de recursos vacío. ¿Todavía recibes un error? (Por cierto, el nombre del constructor "StandardResources" es un error tipográfico, ¿verdad?) – AnthonyWJones

+0

Typo corregido. Aún recibo un error al usar la clase vacía y el diccionario de recursos XAML vacío. – PanJanek

Respuesta

6

¿Está tratando de utilizar este ResourceDictionary como un valor de origen de un diccionario fusionado? Si es así, eso no es compatible. Obtiene ese error xClassNotDerivedFromElement, que es una manera extraña de indicarlo, pero aquí está el motivo: el valor del atributo Fuente se traduce de una manera que hace referencia al XAML como XAML, no como una clase. El analizador XAML abre ese XAML como una acción de carga pura sin beneficio de ninguna precompilación, y no puede conciliar la clase x: en ese momento.

5

La clase x: está restringida para diccionarios fusionados en App.xaml. En su lugar debe usar su clase definida como código detrás de los recursos de la aplicación:

<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

¡Gracias! ¡Ideas absolutamente doradas! –

0

es una lástima que la creación del código subyacente para un diccionario de recursos ahora significa que no puede crear un ResourceDictionary utilizando el URI para el XAML.

Me quité el código subyacente de nuevo, pero aún así creó el ResourceDictionary de código usando la respuesta de esta question+and+answer

Básicamente sólo crea un vacío ResourceDictionary y el establecimiento de su Source a la xaml uri en el código.

Para mí, esto funcionó mejor porque significa que cualquier otra persona puede seguir haciendo referencia al diccionario de recursos si así lo desean, y hacerlo de la manera "esperada".

Cuestiones relacionadas