2013-11-29 17 views
12

Próbuję użyć wyliczenia, aby wyświetlić odpowiedni obraz. Do tego mam konwerter wartości, który konwertuje wyliczenie na poprawną nazwę zasobu. Moje zasoby są zdefiniowane następująco:Stosowanie wiązania WPF do przypisania statycznego zasobu

<UserControl.Resources> 
    <BitmapImage x:Key="AlarmCat1" UriSource="/Lib.Infrastructure;component/Resources/msg_cat1.bmp" /> 
    <BitmapImage x:Key="AlarmCat2" UriSource="/Lib.Infrastructure;component/Resources/msg_cat2.bmp" /> 
    <BitmapImage x:Key="AlarmCat3" UriSource="/Lib.Infrastructure;component/Resources/msg_cat3.bmp" /> 
    <converters:JamCategoryToImageConverter x:Key="AlarmCategoryConverter" /> 
</UserControl.Resources> 

To działa:

<Image Source="{StaticResource AlarmCat1}" /> 

Ale to nie przetwornica nazywa i prawidłowa wartość jest przekazywana z powrotem. Jaka jest prawidłowa składnia?

<Image Source="{StaticResource { Binding CurrentAlarmItem.AlarmCategory, Converter={StaticResource AlarmCategoryConverter}}}" /> 

Dla kompletności, jest to funkcja konwersji:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    switch ((AlarmCategory)value) 
    { 
     case AlarmCategory.Category1: 
      return "AlarmCat1"; 
     case AlarmCategory.Category2: 
      return "AlarmCat2"; 
     case AlarmCategory.Category3: 
      return "AlarmCat3"; 
     default: 
      return null; 
    } 
} 

Odpowiedz

18

chciałbym wrócić do zasobu w konwerterze:

<Image Source="{Binding CurrentAlarmItem.AlarmCategory, Converter={StaticResource AlarmCategoryConverter}}" /> 

W swoim konwerterze zrobić coś takiego:

return Application.Current.FindResource("AlarmCat1") as BitmapImage; 

ustawić swoje zasoby dla kompletnego wniosku z wykorzystaniem ResourceDictionary (app.xaml)

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Dictionary1.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

W swoim słowniku (Dictionary1.xaml)

<BitmapImage x:Key="AlarmCat1" UriSource="bh.jpg" /> 

Ponieważ twoje zasoby są obecnie określone na applicationlevel, kod będzie teraz znaleźć zasobu i go oddać.

+0

Właśnie usunąłem mój konwerter ... ale ja też wypróbuję twoje rozwiązanie. Wyglądaj bardziej intuicyjnie – uncletall

+0

Wyrzucanie wyjątków, ponieważ zasób nie znajduje się w tym samym zespole. – uncletall

+0

To może nie działać. Jestem pewien, że możesz go uruchomić z nieco innym kodem, ale jeśli powyższa odpowiedź zadziała, powinienem to wykorzystać ;-) –

5

nie można przypisać klucz StaticResource gdyż nie jest DependancyProperty. Albo musisz powiązać Source bezpośrednio z enum przy użyciu converter i zaktualizować kod konwertera, aby zwrócić samą Bitmap.

Druga opcja będzie używana Triggers ustawić właściwość Source zależności od wartości enum.

<Image > 
    <Image.Style> 
     <Style TargetType="{x:Type Image}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding CurrentAlarmItem.AlarmCategory}" 
         Value="Category1"> 
       <Setter Property="Source" Value="{StaticResource AlarmCat1}" /> 
      </DataTrigger> 
     </Style.Triggers> 
     </Style> 
    </Image.Style> 
</Image> 
+0

Świetne, to działa dla mnie! – uncletall

Powiązane problemy