我想根据枚举值显示不同的图标/图像.例如,如果我有以下枚举:
public enum UploadStatus { UnkNown = 0,WaitingToUpload = 10,Uploading = 20,Uploaded = 30,UploadFailed = 40 }
我想编写看起来像这样的XAML:
... <EnumImage Value="{Binding Path=CurrentStatus}"> <EnumImageItem Value="UnkNown" Image="/images/unkNown.png" /> <EnumImageItem Value="WaitingToUpload" Image="/images/clock.png" /> <EnumImageItem Value="Uploading" Image="/images/upload.png" /> <EnumImageItem Value="Uploaded" Image="/images/tick.png" /> <EnumImageItem Value="UploadFailed" Image="/images/error.png" /> </EnumImage> ...
我发现许多帖子都提示自定义IValueConverters,但这些解决方案不适合XAML范例.
任何指针或建议?
解决方法
这是一个值转换器,它维护“XAML范例”,即在XAML中维护枚举值和图像之间的关系.
[contentproperty("Items")] public class EnumToObjectConverter : IValueConverter { public ResourceDictionary Items { get; set; } public object Convert(object value,Type targettype,object parameter,System.Globalization.CultureInfo culture) { string key = Enum.GetName(value.GetType(),value); return Items[key]; } public object ConvertBack(object value,System.Globalization.CultureInfo culture) { throw new NotImplementedException("This converter only works for one way binding"); } }
请注意,这是非常通用的,它实际上将任何枚举类型的值映射到任何仲裁对象.这是它在Xaml中的用法: –
<Grid.Resources> <local:EnumToObjectConverter x:Key="Icons"> <ResourceDictionary> <BitmapImage x:Key="UnkNown" UriSource="/images/unkNown.png" /> <BitmapImage x:Key="WaitingToUpload" UriSource="/images/clock.png" /> <BitmapImage x:Key="Uploading" UriSource="/images/upload.png" /> <BitmapImage x:Key="Uploaded" UriSource="/images/tick.png" /> <BitmapImage x:Key="UploadFailed" UriSource="/images/error.png" /> </ResourceDictionary> </local:EnumToObjectConverter> </Grid.Resources>
当枚举类型的绑定属性时,可以使用此转换器: –
<Image Source="{Binding Status,Converter={StaticResource Icons}}" />
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。