2009-06-02 11 views
7

Sto provando ad accedere a un dizionario di risorse in un UserControl code-behind tramite C# e sto avendo scarso successo.Accesso a ResourceDictionary da WPF UserControl

Incorporanda Dizionario:

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

embedded Dizionario:

<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> 

codice dietro:

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

Ho provato tutti gli esempi e suggerimenti utili, ma in arrivo a breve. In questo momento, il successo sarebbe la possibilità di caricare il dizionario. Eventuali suggerimenti?

risposta

0

Quindi, si dispone di un ResourceDictionary definito nell'assembly di un UserControl e si desidera accedervi dal code-behind di tale UserControl?

Dovresti poterlo fare. Tuttavia, se il codice che hai elencato si trova nel costruttore, potresti non avere accesso al dizionario delle risorse (potrebbe non essere ancora caricato). Prova ad aggiungere lo stesso codice all'evento "caricato" di UserControl e controlla se funziona. Se stai semplicemente tentando di accedere a una risorsa, come uno stile o un modello, utilizzare le funzioni "FindResource" o "TryFindResource" direttamente dalla classe dovrebbe funzionare anche (ovvero non è necessario avere un oggetto di tipo " ResourceDictionary ").

Spero che questo aiuti!

7

Per accedere a una delle risorse XAML di UserControl nel codebehind, è sufficiente accedere alla proprietà Resources di UserControl. Qualcosa di simile a questo:

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

Anche se, il metodo preferito è quello di utilizzare FindResource(), che cercherà l'intero albero logico per un match alla chiave, piuttosto che solo l'oggetto che viene chiamato su.

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

d'Oh ... dopo la compilazione al raccoglitore locale, in modo che i riferimenti sono relativi, ho implementato il pacchetto soluzione URI trovato qui: ResourceDictionary in a separate assembly e poi FindResource (x: valore della chiave qui).

@PeterAllenWeb, @Pwninstein, grazie per le vostre risposte rapide e per farmi pensare di nuovo.

1

Provare a rimuovere la barra in avanti della posizione. L'unica volta che dovresti usare/Risorse è se devi prima salire su una libreria. come ../Risorse

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

Spero che questo ti aiuti.

Problemi correlati