C#Wpf绑定类型适配器
现在,我使用直接绑定将TreeView项目的图像分配给图像的源:C#Wpf绑定类型适配器,c#,.net,wpf,binding,C#,.net,Wpf,Binding,现在,我使用直接绑定将TreeView项目的图像分配给图像的源: <DataTemplate DataType="{x:Type local:GeoPoint}"> <StackPanel Orientation="Horizontal"> <Image Source="{Binding Color}" Height="32" /> <TextBlock Text="{Binding Name}" Ver
<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”
我想让自定义类型的颜色变量“MarkerColor”,一个包含多种颜色的枚举,并让图像源绑定引用这个值,以便
颜色=MarkerColor.green;绑定将引用“/Resources/green.png”
请注意,PNG的名称不一定与MarkerColor的名称相同,应使用“适配器”转换类型
我知道如何在Java Android SDK中实现这一点,但不确定如何在Wpf中实现这一点。您可以创建一个转换器,它知道如何将枚举值转换为有效资源:
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>