gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:50:04 27 4
gpt4 key购买 nike

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

  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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com