In a combobox, how do I determine the highlighted item (not selected item)?

来源:互联网 发布:程序员挣钱的五种方法 编辑:程序博客网 时间:2024/05/16 09:51

方法1:

PropertyInfo highlightedItemProperty = cb.GetType().GetProperties(BindingFlags.NonPublic  | BindingFlags.Instance).Single(pi => pi.Name == "HighlightedItem");object highlightedItemValue = highlightedItemProperty.GetValue(cb, null);
方法2:

const BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance;        PropertyInfo hl = box.GetType().GetProperty("HighlightedItem", flags);

原帖:http://stackoverflow.com/questions/2723977/in-a-combobox-how-do-i-determine-the-highlighted-item-not-selected-item

First, fair warning: I am a complete newbie with C# and WPF.

I have a combobox (editable, searchable) and I would like to be able to intercept the Delete key and remove the currently highlighted item from the list. The behavior I'm looking for is like that of MS Outlook when entering in email addresses. When you give a few characters, a dropdown list of potential matches is displayed. If you move to one of these (with the arrow keys) and hit Delete, that entry is permanently removed. I want to do that with an entry in the combobox.

Here is the XAML (simplified):

<ComboBox x:Name="Directory"    KeyUp="Directory_KeyUp"    IsTextSearchEnabled="True"    IsEditable="True"    Text="{Binding Path=CurrentDirectory, Mode=TwoWay}"    ItemsSource="{Binding Source={x:Static self:Properties.Settings.Default},         Path=DirectoryList, Mode=TwoWay}" />

The handler is:

private void Directory_KeyUp(object sender, KeyEventArgs e){    ComboBox box = sender as ComboBox;    if (box.IsDropDownOpen &&  (e.Key == Key.Delete))    {        TrimCombobox("DirectoryList", box.HighlightedItem);  // won't compile!    }}

When using the debugger, I can see box.HighlightedItem has the value I want but when I try and put in that code, it fails to compile with:

System.Windows.Controls.ComboBox' does not contain a definition for 'HighlightedItem'...

So: how do I access that value? Keep in mind that the item has not been selected. It is merely highlighted as the mouse hovers over it.

Thanks for your help.

Here is a screenshot showing the debugger's display. I hovered over "box" and when the one-line summary was displayed, I then hovered over the + char to expand to this image:

alt text


原创粉丝点击