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;
}
}
在检查它是否为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);
很可能仍然不理想,但不那么杂乱。
编辑:作为代码为我工作,我怀疑布局是罪魁祸首,如果没有项目你的控制可能不占用任何空间,因此使图像不可见。