Связывание изображений WPF SVG с помощью конвертера - PullRequest
1 голос
/ 20 марта 2019

Я хочу изменить источник изображения с:

<Image Source="{svg:SvgImage image.svg}"/>

Для чего-то, что вместо этого использует привязку к свойству enum:

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 и Binding MyEnumProperty в одном выражении.

Я получаю следующие ошибки:

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

И

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

Вопрос: Как правильно это сделать?

1 Ответ

1 голос
/ 20 марта 2019

Выражение

{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>
...