c# - 使用转换器的 WPF SVG 图像绑定
问题描述
我想从以下位置更改我的图像源:
<Image Source="{svg:SvgImage image.svg}"/>
对于在枚举属性上使用绑定的东西:
XAML:
<Resources>
<local:MyConverter x:Key="MyConverter" />
</Resources>
<Image Source="{svg:SvgImage Binding MyEnumProperty, Converter={StaticResource MyConverter}}" />
后面的代码:
public enum MyEnum
{
Value1,
Value2
}
public class MyConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var myValue = (MyEnum)(value);
switch (myValue)
{
case MyEnum.Value1:
return "image1.svg";
case MyEnum.Value2:
return "image2.svg";
default:
throw new NotImplementedException();
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
这不起作用,我怀疑这与svg:SvgImage
andBinding MyEnumProperty
被合并在同一个语句中有关。
我收到以下错误:
The member "Converter" is not recognized or is not accessible.
和
The property 'Converter' was not found in type 'SvgImageExtension'.
问题: 这样做的正确方法是什么?
解决方案
表达方式
{svg:SvgImage Binding MyEnumProperty ...}
不是有效的 XAML,并且因为 SvgImage 是一个标记扩展,所以不能绑定它的属性。
但是,您可以在图像样式中使用 DataTriggers 而不是与转换器绑定:
<Image>
<Image.Style>
<Style TargetType="Image">
<Style.Triggers>
<DataTrigger Binding="{Binding MyEnumProperty}" Value="Value1">
<Setter Property="Source" Value="{svg:SvgImage image1.svg}"/>
</DataTrigger>
<DataTrigger Binding="{Binding MyEnumProperty}" Value="Value2">
<Setter Property="Source" Value="{svg:SvgImage image2.svg}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
推荐阅读
- swift - 如何使用 AVPlayer 同时播放多个音频文件?
- python - 如何为具有自定义管道的自定义估计器运行网格搜索?
- azure - Azure Face API 中的远程主机强制关闭现有连接
- javascript - 为什么在生成器中调用函数运行得更快?
- c++ - C++/CLI Wrapper:在删除包含成员函数的对象后触发回调
- android - 在android中执行backstack片段问题的生命周期方法
- python - Django 接收 QueryDict 而不是 JSON(来自 jQuery 帖子)
- java - Ajax 不会在成功时重新加载 jsp
- java - 在 POSTMAN 中使用 POST 方法时,整数值(不带引号)在输出中转换为字符串。如何停止(验证)它?
- hyperledger-fabric - 跨节点的状态数据库如何在超级账本结构网络中同步?