使用转换器的WPF SVG图像绑定

问题描述 投票:1回答:1

我想改变我的图像来源:

<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:SvgImageBinding MyEnumProperty在同一声明中的组合有关。

我收到以下错误:

The member "Converter" is not recognized or is not accessible.

The property 'Converter' was not found in type 'SvgImageExtension'.

问题:这样做的正确方法是什么?

c# wpf svg binding ivalueconverter
1个回答
1
投票

表达方式

{svg:SvgImage Binding MyEnumProperty ...}

是无效的XA​​ML,并且因为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>
© www.soinside.com 2019 - 2024. All rights reserved.