实现IValueConverter将字符串转换为图像

时间:2013-01-10 13:40:28

标签: c# windows xaml converter ivalueconverter

我目前正在尝试在Windows 8应用程序中显示图像。我有一个方法,它填充了List<string>类型的属性,其中包含许多图像路径。我希望在屏幕上显示这些图像。

因此,我已经实现了从字符串到图像的转换器。但是,我得到了错误:

  • 命名空间中不存在名称“StringToImageConverter” “使用:TestApp.Converters”
  • 'TestApp.Converters.StringToImageConverter'未实现 接口成员 “Windows.UI.Xaml.Data.IValueConverter.ConvertBack(对象, System.Type,object,string)'
  • 'TestApp.Converters.StringToImageConverter'未实现 接口成员 'Windows.UI.Xaml.Data.IValueConverter.Convert(object,System.Type, 对象,字符串)'

以下是我的转换器中的代码:

namespace TestApp.Converters
{
    public sealed class StringToImageConverter : IValueConverter
    {
        public object Convert(object value, Type targetType,
                              object parameter, CultureInfo culture)
        {
            try
            {
                return new BitmapImage(new Uri((string)value));
            }
            catch
            {
                return new BitmapImage();
            }
        }

        public object ConvertBack(object value, Type targetType,
                                  object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

从我的XAML文件:

    <common:LayoutAwarePage
        ...
        xmlns:converters="using:TestApp.Converters"
         DataContext="{Binding RelativeSource={RelativeSource Self}}">
        <Page.Resources>
            <converters:StringToImageConverter x:Key="StringToImageConverter"> </converters:StringToImageConverter>
        </Page.Resources>
...
  <ItemsControl ItemsSource="{Binding Path=test}" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="4"
              HorizontalContentAlignment="Stretch">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Image Source="{Binding Converter={StaticResource StringToImageConverter}}" />
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
...

这是否适用于在Windows 8应用程序中显示我的图像? List<string>图像路径称为test,位于xaml文件后面的代码中。

非常感谢您对此的任何帮助:)

3 个答案:

答案 0 :(得分:4)

显然有两种类型的IValueConverters:

Windows.UI.Xaml.Data.IValueConverter
System.Windows.Data.IValueConverter

听起来你的框架正在期待前者,而你正在实施后者。

您可能还需要更改此内容:

xmlns:converters="using:TestApp.Converters"

到此:

xmlns:converters="clr-namespace:TestApp.Converters"

答案 1 :(得分:2)

Windows.UI.Xaml.Data.IValueConverter预计最后一个参数为string,而不是CultureInfo

答案 2 :(得分:0)

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"       
        xmlns:s="clr-namespace:System.Collections;assembly=mscorlib"
        xmlns:p="clr-namespace:System;assembly=mscorlib"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
        xmlns:Entities="clr-namespace:Entities;assembly=Entities" 
        mc:Ignorable="d" 
        x:Name="XXXXX"
        x:Class="AAAA.XXXXX" Title="Seciones" Height="644.305" Width="909.579"
        xmlns:c="clr-namespace:AAAA">
    <Window.Resources>
        <c:StringToImageConverter x:Key="stringToImageConverter"/>
    </Window.Resources>
.....
</Window>