更改组合框项目WPF的突出显示颜色

更改组合框项目WPF的突出显示颜色,wpf,combobox,highlighting,listboxitems,Wpf,Combobox,Highlighting,Listboxitems,我一直在寻找几个小时,试图找出如何更改组合框项目的突出显示颜色(而不是鼠标盖)。我有一个可编辑的组合框,用于搜索绑定到它的列表中的元素。在列表中键入元素名称将在组合框的下拉列表中突出显示该元素。但元素以默认的“浅灰色”突出显示,很难看到 我尝试过覆盖本文中描述的默认高亮颜色:没有运气 同样,这不是在鼠标上发生的,而是在框中搜索或使用键盘上的箭头向上/向下键浏览列表时发生的。我还考虑过可能查看键盘焦点属性,但不确定如何在模板中实现它。让我知道,我可以张贴模板,如果需要的话 我刚刚为这个组合框启动

我一直在寻找几个小时,试图找出如何更改组合框项目的突出显示颜色(而不是鼠标盖)。我有一个可编辑的组合框,用于搜索绑定到它的列表中的元素。在列表中键入元素名称将在组合框的下拉列表中突出显示该元素。但元素以默认的“浅灰色”突出显示,很难看到

我尝试过覆盖本文中描述的默认高亮颜色:没有运气

同样,这不是在鼠标上发生的,而是在框中搜索或使用键盘上的箭头向上/向下键浏览列表时发生的。我还考虑过可能查看键盘焦点属性,但不确定如何在模板中实现它。让我知道,我可以张贴模板,如果需要的话

我刚刚为这个组合框启动了一个全新的模板,所以它应该非常干净。我只是无法确定我应该瞄准什么元素/触发器/边界


有人对此有什么见解吗?

通过在这里阅读本文找到了答案:

我将修改后的ComboBoxItem模板应用于我的“可编辑ComboxBox”模板。您可以在下面看到,我在IsEditable样式触发器中添加了一个“ItemContainerStyle”属性:

<Style x:Key="CmbRoundedAutoComplete" TargetType="{x:Type ComboBox}">
        <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
        <Setter Property="Background" Value="{StaticResource ComboBox.Static.Background}"/>
        <Setter Property="BorderBrush" Value="{StaticResource ComboBox.Static.Border}"/>
        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/>
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
        <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
        <Setter Property="Padding" Value="6,3,5,3"/>
        <Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
        <Setter Property="ScrollViewer.PanningMode" Value="Both"/>
        <Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
        <Setter Property="Template" Value="{StaticResource ComboBoxTemplate}"/>
        <Style.Triggers>
            <Trigger Property="IsEditable" Value="true">
                <Setter Property="IsTabStop" Value="false"/>
                <Setter Property="Padding" Value="2"/>
                <Setter Property="Template" Value="{StaticResource ComboBoxEditableTemplate}"/>
               <!-- Added this line here --> 
                <Setter Property="ItemContainerStyle" Value="{DynamicResource ComboBoxItemShieldStyle}" />
            </Trigger>
        </Style.Triggers>
    </Style>

有一个MultiTrigger是自定义“ItemContainerStyle”控件模板的一部分(需要注意,这是一种样式,而不是实际的控件模板)。ControlTemplate元素位于样式内部

您可以通过手动将ComboboxItem添加到XAML中的现有ComboxBox并从中生成模板来生成“ComboxItem”模板


您可以在上面的代码中看到我的注释“答案在这里”,您可以通过在组合框字段中键入或使用箭头键导航到所选项目来更改项目的背景色

你可以在下面的“结果”(以红色文本表示)中看到,当前项目的“背景”是非常蓝的颜色,而不是我上面的原始问题中糟糕的灰色

最终结果:


我们能否找到一个解决方案来突出显示可能项目的几个部分,例如,当我键入“office”时,3名候选人可用(见上图),3名候选人的高亮文本“office”为红色?
    <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="IsSelected" Value="True"/>
                <Condition Property="IsMouseOver" Value="False"/>
                <Condition Property="IsKeyboardFocused" Value="False"/>
            </MultiTrigger.Conditions>
        <!--  ANSWER IS HERE Change color on the 2 below lines for border & background -->
              <Setter Property="Background" TargetName="Bd" Value="#D1E8FF"/>
                <Setter Property="BorderBrush" TargetName="Bd" Value="#66A7E8"/>
        </MultiTrigger>