0

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

它使用: - 在查看模式下的一组前/背景颜色 - 在编辑模式下的第二组前/背景颜色 - 另一组用于选定模式(当光标位于组合框中时) - 另一组用于禁用模式

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

除了颜色之外,我有组合框工作。与其他控件不同,简单地尝试执行以下操作(编辑模式的触发器)是行不通的:

<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 的前/后颜色 - 即使上述工作有效?

而且我很好奇是否有人能告诉我为什么像这样的控件不使用与其他数据输入控件类似的界面(这不是多态性的全部想法吗?)这没什么大不了的,只是好奇,那就是全部。

谢谢!

4

1 回答 1

1

你没有以你目前试图实现的方式实现你所追求的。不需要使用 a 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在该属性上设置的值(使其看起来已禁用)。如果您绝对必须添加Triggerfor IsEnabled,那么您将必须实现自己的ControlTemplateforComboBox以覆盖该默认行为。如果是这种情况,请查看 MSDN 上的ControlTemplate 类页面或提出新问题以寻求帮助。

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

所以我想你可以有一个bool名为的属性IsViewMode,然后你会添加另一个Trigger这样的:

                <Trigger Property="IsViewMode" Value="True">
                    <Setter Property="ComboBox.Background" Value="Orange" />
                </Trigger>

但是,如果您的原始语法是正确的,那么您Trigger将如下所示:

                <Trigger Property="wpfMisc:myCtrl.viewMode" Value="True">
                    <Setter Property="ComboBox.Background" Value="Orange" />
                </Trigger>
于 2013-10-03T08:30:00.837 回答