0

在我的项目中,我有一个名为 Images 的文件夹,我在我的应用程序中使用的所有图像都保存在子文件夹中。所有图像在构建过程中都设置为“资源”。

myproject
  |__Images
      |__AppImages
          |__StarOn.png
          |__StarOff.png

现在,如果我像这样手动设置图像:

<Image Source="Images\AppImages\StarOn.png" width="32" height="32"/>

图像正确显示在图像框中。

我想使用转换器和这样的绑定来设置图像:

<Image>
<Image.Source>
  <Binding Path="Number" converter="{StaticResource GetImagePathConverter}"/>
</Image.Source>
</Image>

其中数字是整数

我的转换器是:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        int questionNr=int.parse(value.ToString());

            if (questionNr>100)
            {
                return "Images\\AppImages\\StarOn.png";
            }

            return "Images\\AppImages\\starOff.png";
    }

但这并没有改变形象?..

我做错了什么?如何从转换器正确设置图像源?

提前致谢

4

2 回答 2

4

您使用转换器的方式不正确。您需要创建一个转换器实例,在您的绑定中使用它StaticResourcelocal:是您需要在 xaml 中声明的本地命名空间 -

<Image>
  <Image.Resources>
    <local:GetImagePathConverter x:Key="GetImagePathConverter"/>
  </Image.Resources>
  <Image.Source>
    <Binding Path="Number" Converter="{StaticResource GetImagePathConverter}"/>
  </Image.Source>
</Image>

此外,Source属性不是字符串类型,而是ImageSource您的转换器中需要一些东西 -

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
   int questionNr=int.parse(value.ToString());

   if (questionNr>100)
   {
      return new BitmapImage(new Uri("Images\\AppImages\\StarOn.png", UriKind.Relative));
   }
   return new BitmapImage(new Uri("Images\\AppImages\\StarOff.png", UriKind.Relative));
}
于 2012-09-02T18:39:03.730 回答
0

看到这个答案

基本上,您必须注意在转换器中返回的对象类型,不能返回类型string属性ImageSource

我不在我的开发机器上,但代码是这样的:

return new BitmapImage(new Uri(the/path/to/image.png)).Source; //or '*.ImageSource', can't remember
于 2012-09-02T18:37:06.020 回答