silverlight   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了silverlight – 如何仅使用XAML显示不同的枚举图标?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我想根据枚举值显示不同的图标/图像.例如,如果我有以下枚举: public enum UploadStatus { Unknown = 0, WaiTingToUpload = 10, Uploading = 20, Uploaded = 30, UploadFailed = 40 } 我想编写看起来像这样的XAML: ...
我想根据枚举值显示不同的图标/图像.例如,如果我有以下枚举:

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}}" />

大佬总结

以上是大佬教程为你收集整理的silverlight – 如何仅使用XAML显示不同的枚举图标?全部内容,希望文章能够帮你解决silverlight – 如何仅使用XAML显示不同的枚举图标?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。