0

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

当源列表为空时,无论是在应用程序加载时,还是在删除所有项目之后,问题就开始了。此时显示的所有绑定值都为空。我使用绑定的 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;
    }

}
4

1 回答 1

0

您在检查其中一个值是否为空之前调用一个方法:

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

这只是错误的一种可能来源。当然,文件路径需要正确,正如 Kent Boogaart 已经指出的那样。此外: “不起作用”没有帮助,如果您想要好的答案提供尽可能多的信息。即到底发生了什么,你的期望是什么,以及这些期望是如何没有得到满足的。


顺便说一下,转换器可以压缩成以下内容:

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

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


编辑:由于代码对我有用,我怀疑布局是罪魁祸首,如果没有项目,您的控件可能不再占用任何空间,从而使图像不可见。

于 2011-10-29T20:02:55.347 回答