数据绑定不适用于Image UriSource

时间:2012-10-24 05:09:39

标签: wpf

我在窗口中有一个图像

  <Image   Source="{Binding Path=MYImage, Converter={StaticResource ResourceKey=imageConverter}}" />

我也尝试过使用值转换器:

 public  class ImageConverter : 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();
    }
}

并为其创建了依赖项属性。

 public string MYImage
    {
        get { return (string)GetValue(MYImageProperty); }
        set { SetValue(MYImageProperty, value); }
    }
    public static readonly DependencyProperty MYImageProperty=DependencyProperty.Register("PickerImage",typeof(string),typeof(MYClass),new PropertyMetadata("/MYProject;component/pic.png"));

但是当我使用它时,不要显示图像!!!

2 个答案:

答案 0 :(得分:0)

您无需转换来源。

你可以绑定一个这样的字符串:

"/My.Namespace;component/Resources/thatsMyImage.png"

XAML:

<Image Source="{Binding Path=MYImage}" />

答案 1 :(得分:0)

这就是我在申请中解决问题的方法。

  1. 我的应用程序有很多解决方案,每个解决方案都有很多项目。
  2. 我使用WPF在VS 2012上运行.NET 4.5。
  3. 我的申请结构是:

    所有MyApplication

    • CoreSolution

      -ProjectA1

      -resources

      - 图像

        warning.ico (Build action set to Resource)
        information.ico (Build action set to Resource)
        error.ico (Build action set to Resource)
      

      + ProjectA2

    • PersonDatabaseSolution

      + ProjectB1

      + ProjectB2

  4. 我在CoreSolution的ProjectA1项目中添加了图像(实际图像而非链接)。我没有改变任何图像的构建动作。编译项目以获取ProjectA1.dll。

  5. 在ProjectB2的PersonDatabaseSolution中,我使用以下代码在代码中引用error.ico:

        private ImageSource _myImage
        public ImageSource MyImage
        {
         get
         {
          if(_myImage==null)
          {
           uriLoc=new Uri("pack://application:,,,/CoreSolution.ProjectA1;component/Resources/Images/error.ico", UriKInd.Absolute);
           BitmapImage bmImage = new BitmapImage();
           bmImage.BeginInit();
           bmImage.UriSource = uriLoc;
           bmImage.EndInit();
           _myImage=bmImage;
          }
          return _myImage;
         }
        }
    
  6. MyImage属性绑定在xaml:

     <Image Source="{Binding Path=MyImage}"/>
    
  7. 到目前为止,这对我有用。希望它也有助于其他人。

    谢谢, RDV