使用ComboBoxItem文本作为Property Setter的值

时间:2009-12-09 19:44:11

标签: c# wpf xaml combobox triggers

嘿伙计们!这是交易......

我的窗口中定义了一个ComboBox。这个comboBox的内容只是一个包含Brushes类中所有值的字符串列表。到目前为止没什么特别的......

但我想要实现的是一种在用户更改颜色时更改组合框背景颜色的方法。颜色将是列表中选择的值。

我正在阅读关于触发器和设置器的内容,但我仍然不知道该怎么做。

(顺便说一句,我已经有了一个转换器,可以在有效的Brush中转换字符串。)

<ComboBox Name="cmbColor" >
    <ComboBox.Triggers >
        <Trigger Property="SelectedIndex" > // <- Pseudocode!
            <Setter Property = "Foreground" Value="select_value_in_combo,Converter={StaticResource ColorConverter}"/>
        </Trigger>
    </ComboBox.Triggers>
</ComboBox>

想法?

谢谢!

2 个答案:

答案 0 :(得分:3)

您只需使用数据绑定即可解决此问题:

<Window x:Class="ComboBoxBackgroundSpike.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:ComboBoxBackgroundSpike"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <Grid.Resources>
            <local:StringToBrushConverter x:Key="StringToBrush"/>
        </Grid.Resources>
        <ComboBox Background="{Binding RelativeSource={RelativeSource Self},
                               Path=SelectedValue,
                               Converter={StaticResource StringToBrush}}"
                  ItemsSource="{Binding}">
        </ComboBox>
    </Grid>
</Window>

答案 1 :(得分:1)

您不需要使用触发器 - 您可以使用绑定...

将背景颜色绑定为组合框的SelectedValue - 请记住,您需要将字符串转换为Brush(使用实现IValueConverter的类)

当我到达Visual Studio时,

将使用代码示例进行更新...

请参阅dabblernl对代码示例的回答:)