WPF&;XAML:如何将颜色属性绑定到笔刷

WPF&;XAML:如何将颜色属性绑定到笔刷,wpf,xaml,mvvm,Wpf,Xaml,Mvvm,我正在尝试设置文本块的背景: <ListBox x:Name="Teams" Grid.Row="0" Grid.ColumnSpan="2" HorizontalAlignment="Center" > <ListBox.ItemTemplate> <DataTemplate> <DataTemplate.Resources>

我正在尝试设置文本块的背景:

        <ListBox x:Name="Teams" Grid.Row="0" Grid.ColumnSpan="2" HorizontalAlignment="Center" >
        <ListBox.ItemTemplate>
            <DataTemplate>
                <DataTemplate.Resources>
                    <SolidColorBrush x:Key = "teamColor" Color="{Binding TeamColor}"/>
                    <!--This below doesn't work either..-->
                    <!--<SolidColorBrush x:Key = "teamColor" Color="Aqua"/>-->
                </DataTemplate.Resources>

                <StackPanel Orientation="Vertical" >
                    <TextBlock Text="{Binding TeamName}" HorizontalAlignment="Center" Background="{Binding teamColor}"/>

                    <!--Binding with the viewModel color property works, since the textblock below displays the team's color-->
                    <TextBlock Text="{Binding TeamColor}" HorizontalAlignment="Center"/>  
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

因为,如果我定义了一个精确的颜色(请参见注释行-color=Aqua),并且textblock的背景仍然保持为白色,那么我假设datatemplate.resources中定义的给定solidcolorbrush不能用于设置textblock的背景色

我错过了什么

Background="{Binding teamColor}"
没有意义,因为没有
teamColor
属性

应该是

Background="{StaticResource teamColor}"

或者没有资源声明:

<TextBlock Text="{Binding TeamName}" HorizontalAlignment="Center">
    <TextBlock.Background>
        <SolidColorBrush Color="{Binding TeamColor}"/>
    </TextBlock.Background>
</TextBlock>


“绑定”类型的“源”属性上无法设置“DynamicResourceExtension”。“DynamicResourceExtension”只能在DependencyObject的DependencyProperty上设置。“啊,对不起,复制/粘贴错误。”。克莱门斯的回答和我想说的一样,这些都不管用。XAML解析没有问题,但textblock的颜色仍然为白色—可能您的TeamColor属性的类型错误。它应该是
System.Windows.Media.Color
。Visual Studio中的输出窗口中是否有任何数据绑定错误消息?现在我正在使用System.Windows.Media.Color。textblock仍然为白色,但颜色的textblock中的文本(我们无法判断您何时不向我们显示代码的相关部分,即视图模型属性声明和值分配。若要从
System.Windows.Media.color
中获取颜色名称,您必须在
IValueConverter
中执行类似操作。