wpf comboBox着色问题

时间:2013-10-03 07:54:13

标签: wpf xaml combobox

由于要求,我需要一个如下工作的组合框:

它使用:   - 在查看模式下,前/后的一组颜色   - 处于编辑模式时前/后的第二组颜色   - 所选模式的另一组(当光标位于comboBox中时)   - 另一套用于禁用模式

用户永远无法编辑内容,只需单击向下箭头并从列表中选择。

除了颜色外,我的comboBox工作正常。与其他控件不同,只是尝试执行以下操作(编辑模式的触发器)不起作用:

<MultiTrigger>
<MultiTrigger.Conditions>
    <Condition Property="IsFocused"
         Value="false" />
    <Condition Property="wpfMisc:myCtrl.viewMode"
         Value="false" />
    <Condition Property="IsEnabled"
         Value="true" />
</MultiTrigger.Conditions>
<Setter Property="BorderBrush"
    Value="{DynamicResource controls-editableBorderBrush}" />
<Setter Property="Background"
    Value="{DynamicResource controls-editableBackgroundBrush}" />
<Setter Property="Foreground"
    Value="{DynamicResource controls-editableForegroundBrush}" />
</MultiTrigger>

我需要在我的样式中设置什么才能更改显示的SelectedItem的前/后颜色 - 即上述工作?

我很好奇是否有人能告诉我为什么像这样的控件没有像其他数据输入控件那样使用类似的接口(这不是多态的整个想法吗?)这不是什么大问题,只是好奇,就是这样。

谢谢!

1 个答案:

答案 0 :(得分:1)

你没有以你目前正在努力实现它的方式实现你所追求的目标。无需使用MultiTrigger,只需使用多个连续Trigger个对象:

<ComboBox Width="150" Height="24">
    <ComboBox.Style>
        <Style>
            <Setter Property="ComboBox.Background" Value="Green" />
            <Style.Triggers>
                <Trigger Property="ComboBox.IsFocused" Value="True">
                    <Setter Property="ComboBox.Background" Value="Red" />
                </Trigger>
                <Trigger Property="ComboBox.IsEnabled" Value="False">
                    <Setter Property="ComboBox.Background" Value="Blue" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
</ComboBox>

现在,我已向您展示IsEnabled Trigger,以证明您可以添加多个Trigger个对象。但是,您实际上无法将此Trigger用于IsEnabled,因为默认Trigger内已定义ComboBox已设置Trigger该属性(使其看起来禁用)。如果您绝对 Trigger添加IsEnabled,那么您必须为ControlTemplate实施自己的ComboBox以覆盖该默认值行为。如果是这种情况,请查看MSDN上的ControlTemplate Class页面,或者向新问题寻求帮助。

要解决您对“查看模式”的其他要求,有点棘手。您提供的代码看起来就像是试图直接从类中检索值,而不是该类的实例。在WPF中,我们通常将public属性添加到视图模型或我们可以绑定到的文件后面的代码中。

所以我想你可以拥有一个名为bool的{​​{1}}属性,然后你会像这样添加另一个IsViewMode

Trigger

但是,如果您的原始语法正确,那么您的 <Trigger Property="IsViewMode" Value="True"> <Setter Property="ComboBox.Background" Value="Orange" /> </Trigger> 将如下所示:

Trigger