silverlight - 如何仅使用 XAML 显示不同的 Enum 图标?

标签 silverlight xaml enums

我想根据枚举值显示不同的图标/图像。例如,如果我有以下枚举:

  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, Type targetType, object parameter, 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>

此转换器可以在绑定(bind)枚举类型的属性时使用:-

 <Image Source="{Binding Status, Converter={StaticResource Icons}}" />

关于silverlight - 如何仅使用 XAML 显示不同的 Enum 图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2787725/

相关文章:

silverlight - 向 Silverlight 公开 Entity Framework ENTITY 类?

c# - 变量的绑定(bind)与显式赋值

c# - XAML-创建类的实例

xaml - 动态设置 Camera.MAUI 组件的宽度和高度

java - 如何从枚举中提取所有值并将它们添加到 List<String>

silverlight - MVVM Light - 向后台代码发送通知

c# - Silverlight 动态资源文件位置

wpf - 鼠标悬停时更改 ListViewItem 背景颜色

c - 如何使用两个枚举和一个 const char* 根据文本结果打印颜色?

c++ - 在枚举上重载 << 运算符会导致运行时错误