正在使用字符串路径绑定背景



我尝试将ViewModel中的字符串(它是png的路径(绑定到网格背景。此字符串可以为null。它工作良好,但在输出cmd是

System.Windows.Data错误:23:无法将"从类型"转换为具有默认转换的"en-US"区域性的类型"System.Windows.Media.ImageSource";考虑使用转换器

如何将字符串路径绑定到后台以避免此错误?我的当前绑定:FieldControl.CS:

public string BackgroundPath
{
get
{
return (string)GetValue(BackgroundPathProperty);
}
set
{
SetValue(BackgroundPathProperty, value);
}
}
public static readonly DependencyProperty BackgroundPathProperty =
DependencyProperty.Register("BackgroundPath", typeof(string), typeof(FieldControl), new PropertyMetadata(null));

FieldControl.XAML:

<Grid.Background>
<ImageBrush
ImageSource="{
Binding Path=BackgroundPath,  
Mode=OneWay, 
UpdateSourceTrigger=PropertyChanged, 
RelativeSource={
RelativeSource Mode=FindAncestor, 
AncestorType={x:Type UserControl}
}
}" />
</Grid.Background>

在主窗口.XAML中:

<ItemsControl
ItemsSource="{Binding FieldsVM}">
...
<ItemsControl.ItemTemplate>
<DataTemplate>
<controls:FieldControl
BackgroundPath="{Binding Path=BackgroundPath }"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

从编译器中删除错误的一种方法是创建一个IValueConverter,并按照编译器的建议在ImageBrush元素中使用。

IValueConverter可能是这样写的:

[ValueConversion(typeof(string), typeof(ImageSource))]
public class StringToImageSourceConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
if (value == null) return null;
var path = value.ToString();
return new BitmapImage(new Uri(path, UriKind.RelativeOrAbsolute));
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
throw new NotSupportedException();
}
}

以及在FieldControl的xaml:中

<UserControl.Resources>
<local:StringToImageSourceConverter x:Key="StringToImageSourceConverter" />
</UserControl.Resources>
<Grid Height="100">
<Grid.Background>
<ImageBrush ImageSource="{Binding Path=BackgroundPath, Mode=OneWay, UpdateSourceTrigger=PropertyChanged, ElementName=Uc1, 
Converter={StaticResource StringToImageSourceConverter}}" />
</Grid.Background>
</Grid>

在此之后,您不应该看到来自编译器的错误。

我在这个项目中测试代码。

相关内容

  • 没有找到相关文章

最新更新