問題描述
打開 ComboBox DropDown 時不要選擇文本輸入 (Do not select text input when ComboBox DropDown is opened)
我的 WPF 應用程序中有一個 ComboBox,我想在其中輸入文本,用於更新 ComboBox 的內容(項目)。
每當我輸入一個字符時,我都想要更新了要顯示的項目。所以我設置了 IsDropDownOpen = true;
,但這會導致輸入的 Text 被選中。
結果是:我輸入 1 個字符,ComboBox DropDown 被打開(並且顯示新項目),字符被選中。我鍵入第二個字符並替換第一個字符,因為它已被選中(duh)!
如何取消選擇組合框中的所有文本?我顯然想輸入超過 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:
To deselect all Text from a ComboBox, first get the TextBox Element:
TextBox tb = (TextBox)comboBoxItemID.Template.FindName("PART_EditableTextBox", comboBoxItemID);
(source: How to get ComboBox.SelectedText in WPF )
Then use the TextBox method Select(int start, int length)
to set the selection, e.g.
tb.Select(tb.Text.Length, 0);
(source: Deselect text in a textbox )
Finally, disable the IsTextSearchEnabled
property. I haven't done much testing to find out why exactly this has to be disabled, but I guess in my case it conflicts with the way I update the Items and then deselect the Text.