突出显示组合框中的第一个项目时未选择
我有一个自定义行为附加到组合框控件。突出显示组合框中的第一个项目时未选择
在我想要的行为中,默认情况下,突出显示实现增量搜索的组合框的第一项。我的意思是结果呈现在弹出框中的第一项应突出显示但未选中。
这意味着我不能使用SelectedIndex = 0
,因为它也会选择该项目。我想保持ComboBox为空,但将项目的视觉状态设置为突出显示。
我看到有一个IsHighlightedProperty
ComboBoxItem
但这是注册为只读dp所以没有帮助。
有反正我可以做到这一点吗?
您的项目清单应该是某种ItemsControl
(即ComboBox
,ListBox
,ListView
,TreeView
等)吗?
因此,必须对自己的财产ItemTemplate
...
所以在这ItemTemplate
添加将有 MultiBinding
两个特性DataTrigger
......
- 当前的数据上下文的清单项目...
{Binding}
- 该清单的ItemsSource ...
{Binding ItemsSource, RelativeSource={RelativeSource AncetsrType={x:Type ItemsControl}}}
的MultiBinding.Converter
将返回true,如果
values[0] == ((IEnumerable)values[1]).Cast<object>().First()
然后在此基础上国旗在DataTrigger
你可以申请要在列表中是第一个项目无论款式!
希望这会有所帮助。
我可能不想设置样式,但想要设置突出显示的组合框,并且应该使用现有样式进行突出显示。 – gaurawerma 2012-08-08 13:26:04
除了使用转换器,您还可以使用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 ItemsSource="{Binding Items}" SelectedIndex="-1"
AlternationCount="500"
ItemContainerStyle="{StaticResource FirstColor}"/>
的HighlightBrushKey
将使用现有的高亮风格,而不是自定义颜色。
我需要从行为中做到这一点。我不想修改现有的控件。 – gaurawerma 2012-08-08 13:51:21
你能更明确地突出显示吗?我们正在说'[突出显示[v]]'还是保持组合空白,但更改第一个项目的颜色以突出显示? – 2012-08-08 12:25:32
当然,我想保留组合框为空,但将第一个项目的颜色更改为突出显示。 – gaurawerma 2012-08-08 12:32:38