我想将Border Property的背景绑定到列表中的元素。
我有一个字典,其中包含以下内容:
<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>
现在我填充一个ObservableCollection,其中包含一个包含名为“BackgroundStyle”的属性的对象。当我填充带有样式背景的列表框时,我想将背景绑定到“BackgroundStyle”
<Border x:Name="Border" BorderThickness="1" CornerRadius="4" Width="120" Height="80"
VerticalAlignment="Center" HorizontalAlignment="Center" Padding="4"
BorderBrush="Black" Background="{Binding Path=BackgroundStyle}">
这很好用,如果BackgroundStyle =“Red”或“Green”但如果我使用“ConfigurationItemBackground”它将不起作用。
有什么建议吗? 谢谢你的帮助;)
-Tim -
答案 0 :(得分:0)
您不能完全按照自己的意图去做,这主要是使用数据绑定来存储绑定对象中资源的键。最接近的是this question的答案,它基本上使用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,所以这可能需要一些调整,但它应该在很大程度上是正确的。)