Вы можете сделать это, используя 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();
}
}
Очевидно, что вам нужно объявить пространства имен и ресурсы для CLR в XAML, чтобы вы могли получить к ним доступ (если вы назвали свои настройки и классы конвертера как-то по-другому, убедитесь, что вы изменили это для соответствия):
...
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 #, но это будет зависеть от того, как вы настроили свои константы данных, поэтому может быть нежелательным в много дел.]