突出显示组合框中的第一个项目时未选择

问题描述:

我有一个自定义行为附加到组合框控件。突出显示组合框中的第一个项目时未选择

在我想要的行为中,默认情况下,突出显示实现增量搜索的组合框的第一项。我的意思是结果呈现在弹出框中的第一项应突出显示但未选中。

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

我看到有一个IsHighlightedPropertyComboBoxItem但这是注册为只读dp所以没有帮助。

有反正我可以做到这一点吗?

+0

你能更明确地突出显示吗?我们正在说'[突出显示[v]]'还是保持组合空白,但更改第一个项目的颜色以突出显示? – 2012-08-08 12:25:32

+0

当然,我想保留组合框为空,但将第一个项目的颜色更改为突出显示。 – gaurawerma 2012-08-08 12:32:38

您的项目清单应该是某种ItemsControl(即ComboBoxListBoxListViewTreeView等)吗?

因此,必须对自己的财产ItemTemplate ...

所以在这ItemTemplate 添加将有 MultiBinding两个特性DataTrigger ......

  1. 当前的数据上下文的清单项目... {Binding}
  2. 该清单的ItemsSource ... {Binding ItemsSource, RelativeSource={RelativeSource AncetsrType={x:Type ItemsControl}}}

MultiBinding.Converter将返回true,如果

values[0] == ((IEnumerable)values[1]).Cast<object>().First() 

然后在此基础上国旗在DataTrigger你可以申请要在列表中是第一个项目无论款式!

希望这会有所帮助。

+0

我可能不想设置样式,但想要设置突出显示的组合框,并且应该使用现有样式进行突出显示。 – 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将使用现有的高亮风格,而不是自定义颜色。

+0

我需要从行为中做到这一点。我不想修改现有的控件。 – gaurawerma 2012-08-08 13:51:21