2009-06-02 38 views
7

Próbuję uzyskać dostęp do słownika zasobów w kodzie użytkownika UserControl za pośrednictwem C# i mam niewielki sukces.Uzyskiwanie dostępu do ResourceDictionary z WPF UserControl

Połączony słownik:

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

Wbudowany słownik:

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

Kod za:

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

Próbowałem wszystkich przykładów i pomocnych wskazówek, ale zbliża się krótki. W tej chwili sukces byłby możliwy do załadowania słownika. Jakieś sugestie?

Odpowiedz

0

Masz więc ResourceDictionary zdefiniowany w zespole UserControl i chcesz uzyskać do niego dostęp z tego kodu UserControl?

Powinieneś być w stanie. Jeśli jednak kod, który wymieniłeś, znajduje się w konstruktorze, możesz nie mieć dostępu do słownika zasobów (może jeszcze nie być załadowany). Spróbuj dodać ten sam kod do "załadowanego" zdarzenia UserControl i sprawdź, czy to działa. Jeśli po prostu próbujesz uzyskać dostęp do zasobu, takiego jak styl lub szablon, to funkcje "FindResource" lub "TryFindResource" powinny działać również bezpośrednio z klasy (np. Nie musisz mieć obiektu typu " ResourceDictionary ").

Nadzieję, że pomaga!

7

Aby uzyskać dostęp do zasobów XAML UserControl w swoim kodzie źródłowym, wystarczy, że uzyskasz dostęp do właściwości Resources kontrolki UserControl. Coś takiego:

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

Chociaż preferowaną metodą jest użycie FindResource(), która przeszuka całą logiczną drzewa na mecz do klucza, a nie tylko obiekt jest nazywany dalej.

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

d'Oh ... po kompilacji do lokalnego kosza tak, że odwołania są względne, I wdrożone pakiet znaleźć rozwiązanie URI tutaj: ResourceDictionary in a separate assembly a następnie FindResource (x: wartość klucza tutaj).

@PeterAllenWeb, @Pwninstein, dzięki za szybką reakcję i ponowne myślenie.

1

Spróbuj usunąć przedni ukośnik przed swoją lokalizacją. Jedyny czas, jaki powinieneś użyć/Resources to, jeśli musisz najpierw wejść do biblioteki. jak ../Resources

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

Mam nadzieję, że to pomoże.

Powiązane problemy