打开ComboBox DropDown时,请勿选择文本输入

时间:2016-04-01 12:48:05

标签: c# wpf combobox

我的WPF应用程序中有一个ComboBox,我想输入Text in,用于更新ComboBox的Content(Items)。

每当我输入一个字符时,我都希望显示更新的项目。所以我设置IsDropDownOpen = true;,但这会导致输入的文本被选中。

结果是:我键入1个char,打开ComboBox DropDown(并显示新项目),选择char。我键入第二个字符,它取代了第一个字符,因为它被选中(duh)!

如何取消选择ComboBox中的所有文本?我显然想要键入多于1个字符而不必再次单击ComboBox以取消选择所有文本...

代码:

//MainWindow.xaml
<ComboBox x:Name="comboBoxItemID" HorizontalAlignment="Left" Height="38"
 VerticalAlignment="Top" Width="300" Canvas.Left="197" FontSize="21.333"
 IsEnabled="True" KeyUp="comboBoxItemID_KeyUp" IsEditable="True"/>

//comboBoxItemID_KeyUp()
List<InventorySearchResult> Items = Invent.SearchArticle(this.comboBoxItemID.Text); //Get new Data
comboBoxItemID.ItemsSource = Items;         //Update comboBox Data
comboBoxItemID.DisplayMemberPath = "Name";
comboBoxItemID.IsDropDownOpen = true;

1 个答案:

答案 0 :(得分:3)

要取消选择ComboBox中的所有文本,请首先获取TextBox元素:

TextBox tb = (TextBox)comboBoxItemID.Template.FindName("PART_EditableTextBox", comboBoxItemID);

(来源:How to get ComboBox.SelectedText in WPF

然后使用TextBox方法Select(int start, int length)来设置选择,例如

tb.Select(tb.Text.Length, 0);

(来源:Deselect text in a textbox

最后,禁用IsTextSearchEnabled属性。我没有做太多测试,以找出为什么必须禁用它,但我想在我的情况下它与我更新项目的方式冲突,然后取消选择文本。