2

我正在尝试根据其绑定值在 ListBox.ItemTemplate 中显示图像,绑定值是对象的状态(待处理、已检索、已发布、完成或错误),这是 Image 元素的 XAML。

<Window.Resources>
    <local:StatusImageConverter x:Key="StatusImage" />
</Window.Resources>

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

我在项目资源中添加了 2 个图像(Badge_tick、Badge_cross)并使用 IValueConverter 接口将状态转换为将显示在模板中的图像,这里是 Converter 类

[ValueConversion(typeof(PreTripItem.PreTripItemStatus), typeof(Bitmap))]
public class StatusImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        PreTripItem.PreTripItemStatus status = (PreTripItem.PreTripItemStatus)value;

        switch (status)
        {
            case PreTripItem.PreTripItemStatus.Complete:
                return new Bitmap(Properties.Resources.Badge_tick);
            case PreTripItem.PreTripItemStatus.Error:
                return new Bitmap(Properties.Resources.Badge_cross);
            default:
                return null;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();  //Does not need to be converted back
    }
}

这可以很好地构建/编译并运行,但是当状态更改时,TemplateItem 中不会显示图像。我在我的类中使用 INotifyPropertyChanged 接口,所以接口知道属性何时自动更改,所以我马上知道这不是问题:)

我浏览了谷歌大学,看到很多原则上存在相同问题的帖子,但在使用转换器界面和项目资源时没有找到解决方案。

任何人都可以帮忙吗?提前致谢

我所有的其他 IValueConverter 类都运行良好,只是不是这个。

4

2 回答 2

1

尝试返回BitmapSource类型来代替Bitmap

要更改的位:

[ValueConversion(typeof(PreTripItem.PreTripItemStatus), typeof(BitmapSource))] 

并返回一个 BitmapImage,如下所示:

return new BitmapImage(new Uri("pack://application:,,,/Resources/Image1.png"));
于 2011-08-23T18:29:18.340 回答
0

我怀疑问题可能在于您使用标准 Bitmap 类,它不是 ImageSource 派生类型。

您需要使用 ImageSource 类型:http: //msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.aspx

如果您不了解包 URI,请参阅此内容:http: //msdn.microsoft.com/en-us/library/aa970069.aspx

于 2011-08-23T15:03:25.943 回答