Вы не можете делать в точности то, что пытаетесь сделать, а именно использовать привязку данных для хранения ключа ресурса в вашем связанном объекте. Ближайшим ответом будет на этот вопрос , который в основном использует ValueConverter
для получения ресурса из ресурсов приложения.
К сожалению, это не будет работать с тем, что вы хотите сделать, то есть использовать локальный ресурс. Для этого вам лучше написать свой собственный ValueConverter
, который преобразует ваше значение string
в кисть.
Вы могли бы сделать нечто общее:
[ValueConversion(typeof(string), typeof(object))]
public class ResourceKeyConverter : IValueConverter
{
public ResourceKeyConverter()
{
Resources = new ResourceDictionary();
}
public ResourceDictionary Resources { get; private set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return Resources[(string)value];
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new InvalidOperationException();
}
}
Тогда используйте это так:
<Window.Resources>
<my:ResourceKeyConverter x:Key="keyConverter">
<ResourceKeyConverter.Resources>
<LinearGradientBrush x:Key="ConfigurationItemBackground" EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFAABBCC" Offset="1"/>
<GradientStop Color="#FFCCDDEE" Offset="0.7"/>
</LinearGradientBrush>
<LinearGradientBrush x:Key="NavigationItemBackground" EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFD97825" Offset="1"/>
<GradientStop Color="#FFFF9A2E" Offset="0.7"/>
</LinearGradientBrush>
</ResourceKeyConverter.Resources>
</my:ResourceKeyConverter>
</Window.Resources>
...
<Border Background="{Binding BackgroundStyle, Converter={StaticResource keyConverter}}">
</Border>
(я дома и у меня нет Visual Studio передо мной, так что это может потребовать некоторой настройки, но это должно быть в значительной степени правильно).