2009-06-02 10 views
7

Estoy intentando acceder a un diccionario de recursos en un código de control de usuario detrás de C# y estoy teniendo poco éxito.Accediendo ResourceDictionary desde WPF UserControl

Diccionario combinada:

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/Resources/BiometricDictionary.xaml" />     
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</UserControl.Resources> 

diccionario incorporado:

<UserControl.Resources> 
    <BitmapImage x:Key="imageDefault">/Resources/Images/default_thumb.png</BitmapImage> 
    <BitmapImage x:Key="imageDisconnected">/Resources/Images/disconnect_thumb.png</BitmapImage> 
    <BitmapImage x:Key="imageFailed">/Resources/Images/failed_thumb.png</BitmapImage> 
    <BitmapImage x:Key="imageSuccess">/Resources/Images/success_thumb.png</BitmapImage> 
</UserControl.Resources> 

Código atrás:

 var resourceDictionary = new ResourceDictionary(); 
     resourceDictionary.Source = new Uri("/Resources/BiometricDictionary.xaml", UriKind.Relative); 

he intentado todos los ejemplos y consejos útiles, pero quedarse corto. En este momento, el éxito sería la capacidad de cargar el diccionario. ¿Alguna sugerencia?

Respuesta

0

Entonces, ¿tiene un ResourceDictionary definido en un ensamblado de UserControl y desea acceder a él desde el código subyacente de UserControl?

Debería poder. Sin embargo, si el código que enumeró está en el constructor, es posible que no tenga acceso al diccionario de recursos (puede que aún no esté cargado). Intente agregar el mismo código al evento "cargado" de UserControl y vea si eso funciona. Si simplemente intenta acceder a un recurso, como un estilo o plantilla, las funciones "FindResource" o "TryFindResource" directamente de su clase también deberían funcionar (es decir, no necesita tener un objeto de tipo " ResourceDictionary ").

Espero que ayude!

7

Para acceder a uno de los recursos XAML de UserControl en su código subyacente, todo lo que necesita hacer es acceder a la propiedad Resources del UserControl. Algo como esto:

BitmapImage myImage = (BitmapImage)this.Resources["imageDefault"]; 

Sin embargo, el método preferido es usar FindResource(), que buscar en todo el árbol lógico para un partido a la tecla, en lugar de sólo el objeto que se llama sucesivamente.

BitmapImage myImage = (BitmapImage)this.FindResource("imageDefault"); 
0

d'Oh ... después de compilar a la papelera local, de modo que las referencias son relativas, he implementado el paquete de solución URI encontrar aquí: ResourceDictionary in a separate assembly y luego FindResource (x: valor de la clave aquí).

@PeterAllenWeb, @Pwninstein, gracias por sus respuestas rápidas y por hacerme pensar de nuevo.

1

Intenta quitar la barra hacia delante delante de tu ubicación. La única vez que debe usar/Resources es si primero tiene que ir a una biblioteca. como ../Resources

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Resources/BiometricDictionary.xaml" />     
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</UserControl.Resources> 

Espero que esto te ayude.

Cuestiones relacionadas