WPF use binding to assign static resource
c#, wpf
Solution
I would return the resource in the converter:
<Image Source="{Binding CurrentAlarmItem.AlarmCategory, Converter={StaticResource AlarmCategoryConverter}}" />
In your converter do something like this:
return Application.Current.FindResource("AlarmCat1") as BitmapImage;
Set your resources for the complete application with the use of resourcedictionary (app.xaml)
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary1.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
In your Dictionary (Dictionary1.xaml)
<BitmapImage x:Key="AlarmCat1" UriSource="bh.jpg" />
Because your resources are now defined on applicationlevel, the code will now find your resource and give it back.
Problem
I am trying to use an enum to display a corresponding image. For this I have a value converter that converts an enum to the correct resource name. My resources are defined as follows: ``` <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> ``` This works: ``` <Image Source="{StaticResource AlarmCat1}" /> ``` But this doesn't, the converter is called and the correct value is passed back. What is the correct syntax? ``` <Image Source="{StaticResource { Binding CurrentAlarmItem.AlarmCategory, Converter={StaticResource AlarmCategoryConverter}}}" /> ``` For completeness, this is the convert function: ``` 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; } } ```