您可以使用MultiBinding和值转换器来执行此操作。首先,使用多重绑定将图像源绑定到基本路径和图像名称:
<ImageBrush>
<ImageBrush.ImageSource>
<MultiBinding Converter="{StaticResource MyConverter}">
<Binding Source="{StaticResource MySettings}" Path="Default.FilePath" />
<Binding Source="ImageName.png"></Binding>
</MultiBinding>
</ImageBrush.ImageSource>
</ImageBrush>
然后,您需要有一个转换器来实现IMultiValueConverter并组合路径的两个部分并使用ImageSourceConverter或通过创建新的BitmapImage创建图像:
class MyConverter: IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
// Concatenate the values.
string filename = Path.Combine(values[0].ToString(), values[1].ToString());
// You can either use an ImageSourceConverter
// to create your image source from the path.
ImageSourceConverter imageConverter = new ImageSourceConverter();
return imageConverter.ConvertFromString(filename);
// ...or you can create a new bitmap with the combined path.
return new BitmapImage(new Uri(filename, UriKind.RelativeOrAbsolute));
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
// No need to implement the convert back as this will never be used in two way binding.
throw new NotImplementedException();
}
}
显然,您需要在 XAML 中为 CLR 内容声明命名空间和资源,以便您可以访问它(如果您已将设置和转换器类称为不同的名称,请确保将其更改为匹配):
...
xmlns:local ="clr-namespace:WpfApplication1">
<Window.Resources>
<local:MyConverter x:Key="MyConverter"></local:MyConverter>
<local:MySettings x:Key="MySettings"></local:MySettings>
</Window.Resources>
我已经测试过了,它工作正常。
[另一种方法是将 ImageSource 属性绑定到数据上下文中的一个属性,该属性组合了 C# 代码中的路径,但这取决于您如何设置数据上下文,因此在许多情况下可能是不可取的。 ]