将ComboBox选项绑定到边框的背景颜色。

时间:2014-05-30 15:23:32

标签: wpf xaml binding combobox element

请原谅我的无知。我是vb.net和WPF的新手。我有一个comboBox,它有一个像这样的颜色列表。顺便说一下,这是在WPF中。

Public Sub New()
    InitializeComponent()
    cmbColors.ItemsSource = GetType(Colors).GetProperties()
End Sub

在XAML中,comboBox的创建方式如下:

<ComboBox Name="cmbColors" HorizontalAlignment="Left" Margin="29,35,0,0" 
          Grid.Row="1" VerticalAlignment="Top" Width="120">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Rectangle Fill="{Binding  Name}" Width="16" Height="16" 
                           Margin="0,2,5,2"/>
                <TextBlock x:Name="cmbColorsText" Text="{Binding Name}"/>
            </StackPanel>
        </DataTemplate>
   </ComboBox.ItemTemplate>
</ComboBox>

我要做的是当程序运行时以灰色的开始背景颜色开始,并且当从组合框中选择新的背景颜色时,背景将更新。 这是我试图绑定到选择的元素的XAML。

<Border BorderBrush="{x:Null}" Grid.Column="1" Grid.Row="1" Background="{Binding Text, ElementName=cmbColors}">
    <TextBlock Text="PRACTICE" Style="{StaticResource linkButtons}"/>

我已经浏览了属性窗口中的每个(字符串)类型的边框&gt;背景&gt;创建绑定&gt;元素&gt; comboBox,由于某种原因(我无法确定)我错过了相应的或正在寻找这是错误的方式。

提前谢谢!!!

2 个答案:

答案 0 :(得分:0)

您正在将Background绑定到字符串,但背景将需要ColorBrush。因此,如果您的组合ItemsSource已经包含ColorBrush的项目,那么您只能绑定到SelectedItem而不是Text

或者您可以在后台绑定中使用转换器,它接受字符串并返回SolidColorBrush,比方说。

答案 1 :(得分:0)

将绑定更改为

<Border BorderBrush="{x:Null}" Grid.Column="1" Grid.Row="1" Background="{Binding SelectedItem.Name, ElementName=cmbColors}">
            <TextBlock  Text="PRACTICE" Style="{StaticResource linkButtons}"/>

ComboBox的Text属性返回PropertyInfo对象的ToString()方法的结果,例如,如果选择Black,它将是“System.Windows.Media.Color Black”,并且不会解析为有效颜色。