C # Wpf Адаптер связующего типа - PullRequest
0 голосов
/ 07 марта 2019

На данный момент я назначаю изображение элемента TreeView, используя прямую привязку к источнику изображения:

<DataTemplate DataType="{x:Type local:GeoPoint}">
     <StackPanel Orientation="Horizontal">
          <Image Source="{Binding Color}" Height="32" />
          <TextBlock Text="{Binding Name}" VerticalAlignment="Center"/>
     </StackPanel>
</DataTemplate>

Привязка цвета относится к строке, содержащей путь к PNG, что-то вроде "/Resources/red.png"

Я хотел бы сделать переменную Color пользовательского типа "MarkerColor", перечисление, содержащее несколько цветов, и иметь привязку источника изображения, ссылающуюся на это значение, так что если

Color = MarkerColor.green;привязка будет ссылаться на "/Resources/green.png"

. Обратите внимание, что имя PNG не обязательно совпадает с именем MarkerColor, для преобразования типа * 1010 следует использовать" адаптер ".

Я знаю, как это сделать в Java Android SDK, но не совсем уверен, как этого добиться в Wpf

1 Ответ

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

Вы можете создать конвертер, который знает, как преобразовать значение перечисления в допустимый ресурс:

public class ColorResourceConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        MarkerColor color = (MarkerColor)value;
        Uri uri;
        switch(color)
        {
            case MarkerColor.Green:
                uri = new Uri("Resources/green.png");
                break;
            case MarkerColor.Red:
                uri = new Uri("Resources/red.png");
                break;
            //...
            default:
                uri = new Uri("Resources/default.png");
                break;
        }

        return new BitmapImage(uri);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

Использование:

<DataTemplate DataType="{x:Type local:GeoPoint}">
    <DataTemplate.Resources>
        <local:ColorResourceConverter x:Key="ColorResourceConverter" />
    </DataTemplate.Resources>
    <StackPanel Orientation="Horizontal">
        <Image Source="{Binding Color, Converter={StaticResource ColorResourceConverter}}" Height="32" />
        <TextBlock Text="{Binding Name}" VerticalAlignment="Center"/>
    </StackPanel>
</DataTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...