Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 突出显示组合框中的第一项而不选择_Wpf_Silverlight - Fatal编程技术网

Wpf 突出显示组合框中的第一项而不选择

Wpf 突出显示组合框中的第一项而不选择,wpf,silverlight,Wpf,Silverlight,我有一个自定义行为附加到ComboBox控件 在我想要的行为中,默认情况下,突出显示实现增量搜索的组合框的第一项。我的意思是,当结果呈现在弹出窗口中时,第一个项目应该高亮显示,但没有被选中 这意味着我不能使用SelectedIndex=0,因为它也会选择项目。我想保持组合框为空,但将项目的视觉状态设置为高亮显示 我看到ComboBoxItem中有一个IsHighlightedProperty,但它注册为只读dp,因此没有帮助 还有什么我可以做的吗?您的项目列表应该是某种项目控件(即组合框,列表框

我有一个自定义行为附加到ComboBox控件

在我想要的行为中,默认情况下,突出显示实现增量搜索的组合框的第一项。我的意思是,当结果呈现在弹出窗口中时,第一个项目应该高亮显示,但没有被选中

这意味着我不能使用
SelectedIndex=0
,因为它也会选择项目。我想保持组合框为空,但将项目的视觉状态设置为高亮显示

我看到
ComboBoxItem
中有一个
IsHighlightedProperty
,但它注册为只读dp,因此没有帮助


还有什么我可以做的吗?

您的项目列表应该是某种
项目控件(即
组合框
列表框
列表视图
树状视图
等),对吗

因此,它必须具有
ItemTemplate
属性

因此在
ItemTemplate
添加一个将具有 对两个属性进行多重绑定

  • 列表项的当前数据上下文<代码>{Binding}
  • 列表的项目资源<代码>{Binding ItemsSource,RelativeSource={RelativeSource AncetsrType={x:Type ItemsControl}}}
  • 如果出现以下情况,
    MultiBinding.Converter
    将返回true

      values[0] == ((IEnumerable)values[1]).Cast<object>().First()
    
    值[0]==((IEnumerable)值[1]).Cast().First()
    
    然后根据
    DataTrigger
    中的此标志,您可以对列表中的第一项应用任何样式


    希望这有帮助。

    您也可以使用组合框的
    alternationandex
    属性获取项目索引,然后使用触发器仅为第一个项目着色。将替换索引设置为始终大于组合框中项目数的值,以便只有一个项目的索引为0。突出显示项目的样式如下所示:

        <Style x:Key="FirstColor" TargetType="{x:Type ListBoxItem}">
            <Style.Triggers>
                <Trigger Property="ComboBox.AlternationIndex" Value="0">
                    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                </Trigger>
            </Style.Triggers>            
        </Style>
    
    
    
    您的组合框将如下所示:

    <ComboBox ItemsSource="{Binding Items}" SelectedIndex="-1" 
              AlternationCount="500" 
              ItemContainerStyle="{StaticResource FirstColor}"/>
    
    
    

    HighlightBrushKey
    将使用现有的高亮显示样式,而不是自定义颜色。

    您能否更明确地说明高亮显示?我们是在谈论
    [突出显示[v]]
    还是将组合框保持为空,但更改第一个项目的颜色以突出显示?当然,我想保持combobox为空,但更改第一个高亮显示项目的颜色。我可能不想设置样式,但想设置comboboxitem高亮显示,它应该使用现有样式进行高亮显示。我需要从行为角度执行此操作。我不想修改现有控件。