我正在尝试使用枚举来显示相应的图像.为此,我有一个值转换器,将枚举转换为正确的资源名称.我的资源定义如下:
<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>
Run Code Online (Sandbox Code Playgroud)
这有效:
<Image Source="{StaticResource AlarmCat1}" />
Run Code Online (Sandbox Code Playgroud)
但事实并非如此,调用转换器并传回正确的值.什么是正确的语法?
<Image Source="{StaticResource { Binding CurrentAlarmItem.AlarmCategory, Converter={StaticResource AlarmCategoryConverter}}}" />
Run Code Online (Sandbox Code Playgroud)
为完整起见,这是转换功能:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
Bra*_*nck 24
我会在转换器中返回资源:
<Image Source="{Binding CurrentAlarmItem.AlarmCategory, Converter={StaticResource AlarmCategoryConverter}}" />
Run Code Online (Sandbox Code Playgroud)
在您的转换器中执行以下操作:
return Application.Current.FindResource("AlarmCat1") as BitmapImage;
Run Code Online (Sandbox Code Playgroud)
使用resourcedictionary(app.xaml)为整个应用程序设置资源
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary1.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
在你的词典(Dictionary1.xaml)
<BitmapImage x:Key="AlarmCat1" UriSource="bh.jpg" />
Run Code Online (Sandbox Code Playgroud)
由于您的资源现在已在applicationlevel上定义,因此代码现在将找到您的资源并将其还原.
你不能绑定StaticResource密钥,因为它不是DependancyProperty.您必须Source使用converter和更新转换器代码直接绑定到枚举以返回Bitmap自身.
第二个选项将用于根据值Triggers设置Source属性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>
Run Code Online (Sandbox Code Playgroud)