Imagebrush图像源绑定转换器

本文关键字:转换器 绑定 图像 Imagebrush | 更新日期: 2023-09-27 18:12:50

我通过绑定使用xml作为应用程序的源。在XML中有一个文件夹列表和每个文件夹的示例图像的路径。文件夹列表绑定到列表框,另一个显示绑定到列表框的选定项,该列表项是xml列表(类型为XmlNode)的项。我添加了使用XmlDocument添加和删除项目的机会,XmlDocument由XmlProvider从xml复制并保存到源文件中。

当源列表为空时,或者在应用程序加载时,或者在删除所有项之后,问题就开始了。此时,显示的所有绑定值都为空。我用绑定的TargetNullValue属性解决了所有的绑定,除了画布背景imagebrush image_source属性,它什么也没显示。

我试着使用一个转换器,但是当我调试它时,我看到了一些奇怪的东西。如果列表中有项,则转换器返回它应该返回的内容并显示图像,但如果列表为空,则转换器返回它应该返回的内容并且不显示图像!请帮帮我。

代码:

XML:

  <Folders>
    <Folder Id="1">
      <Path>folder3'1</Path>
      <SampleImage>C:'images'2011-09-22'site3'1'6.jpg</SampleImage>
    </Folder>
  </Folders>
XAML:

    <Canvas.Background>
      <ImageBrush x:Name="SampleImage" Stretch="Uniform" >
        <ImageBrush.ImageSource>
          <MultiBinding Converter="{StaticResource ImageConverter}" Mode="OneWay">
            <Binding XPath="./SampleImage" />
            <Binding Source="C:'images'SampleImages'no_image.jpg"/>
          </MultiBinding>
        </ImageBrush.ImageSource>
      </ImageBrush>
   </Canvas.Background>
c#:

public class ImageConverter : IMultiValueConverter
{
    public object Convert(object[] value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        ImageSourceConverter imageConverter = new ImageSourceConverter();
        bool bool1=value[0].Equals(DependencyProperty.UnsetValue);
        if (value[0] != null &&!bool1) //if the source isn't null
        {
             //this works fine
             return imageConverter.ConvertFromString(value[0].ToString());
        }
        //here the converter returns the right object but the alternate image isn't shown and the background left blank
        return imageConverter.ConvertFromString(value[1].ToString());
        //here too the converter returns the right object but the alternate image isn't shown and the background left blank
        //return imageConverter.ConvertFromString(@"C:'images'SampleImages'no_image.jpg");
    }

    public object[] ConvertBack(object value, Type[] targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}

Imagebrush图像源绑定转换器

在检查它是否为null之前,对其中一个值调用一个方法:

bool bool1=value[0].Equals(DependencyProperty.UnsetValue);
if (value[0] != null &&!bool1)

这只是一个可能的错误来源。当然,文件路径必须正确,Kent Boogaart已经指出了这一点。进一步:"this don't work"not是有帮助的,如果你想要好的答案,提供尽可能多的信息。也就是到底发生了什么&你的期望是什么,以及这些期望是如何没有实现的。


转换器可以通过以下方式压缩为:

string path = (value[0] is string && value[0] != null) ?
    (string)value[0] : (string)value[1];
return new ImageSourceConverter().ConvertFromString(path);

很可能仍然不理想,但不那么杂乱。


编辑:作为代码为我工作,我怀疑布局是罪魁祸首,如果没有项目你的控制可能不占用任何空间,因此使图像不可见。