我有一个附加到ComboBox控件的自定义行为。
在我想要的行为中,默认情况下,突出显示实现增量搜索的ComboBox的第一项。我的意思是在弹出窗口中的时刻结果呈现第一个项目应该突出显示但未选中。
这意味着我无法使用SelectedIndex = 0
,因为它也会选择该项目。我想保持ComboBox为空,但将项目的可视状态设置为高亮显示。
我看到IsHighlightedProperty
中有一个ComboBoxItem
,但是它已被注册为只读dp,因此没有帮助。
无论如何我能做到吗?
答案 0 :(得分:1)
您可以使用ComboBox的AlternationIndex
属性来获取项目的索引,然后使用触发器为第一个设置颜色,而不是使用转换器。将交替索引设置为始终大于ComboBox中的项目数,以便只有一个项目的索引为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看起来像这样:
<ComboBox ItemsSource="{Binding Items}" SelectedIndex="-1"
AlternationCount="500"
ItemContainerStyle="{StaticResource FirstColor}"/>
HighlightBrushKey
将使用现有的突出显示样式而不是自定义颜色。
答案 1 :(得分:0)
您的商品列表应该是某种ItemsControl
(即ComboBox
,ListBox
,ListView
,TreeView
等)对吗?
所以它必须有一个ItemTemplate
属性......
那样ItemTemplate
添加将要拥有的DataTrigger
MultiBinding
到两个属性......
{Binding}
{Binding ItemsSource, RelativeSource={RelativeSource AncetsrType={x:Type ItemsControl}}}
如果
,MultiBinding.Converter
将返回true
values[0] == ((IEnumerable)values[1]).Cast<object>().First()
然后根据DataTrigger
中的这个标志,您可以将所需的任何样式应用于列表中的第一个项目!
希望这有帮助。