C# Wpf可编辑组合框:如何通过按enter键向列表中不存在的组合框输入新文本
问题:我无法在组合框中输入自定义文本,并按enter关闭下拉列表,因为我写入的自定义文本被下拉列表中的选定项覆盖 我使用一个带有字符串列表的editable=true和isTextSearchEnabled=true组合框:C# Wpf可编辑组合框:如何通过按enter键向列表中不存在的组合框输入新文本,c#,.net,wpf,xaml,combobox,C#,.net,Wpf,Xaml,Combobox,问题:我无法在组合框中输入自定义文本,并按enter关闭下拉列表,因为我写入的自定义文本被下拉列表中的选定项覆盖 我使用一个带有字符串列表的editable=true和isTextSearchEnabled=true组合框: <ComboBox IsEditable="True" IsTextSearchEnabled="True" ItemsSource="{Binding Names}" SelectedItem="{Binding SelectedName
<ComboBox
IsEditable="True"
IsTextSearchEnabled="True"
ItemsSource="{Binding Names}"
SelectedItem="{Binding SelectedName}"
Text="{Binding Name}"
>
<ComboBox.Style>
<Style>
<EventSetter Event="TextBoxBase.TextChanged"
Handler="cmbTextField_TextChanged" />
</Style>
</ComboBox.Style>
</ComboBox>
如何解决问题:
您可以尝试订阅OnPreviewKeyDown方法,该方法将在按键处理之前触发。调用该方法时,可以检查按下的键是否返回,并将其标记为已处理 这方面的东西应该可以做到:
private void cmbTextField_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) {
if (e.KeyData == Keys.Return) {
e.Handled = true;
}
}
请记住,这段代码没有经过测试。我知道这是一段很长的时间,但我通过注册到事件:选择更改并关闭下拉菜单解决了它:
private void Combobox_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox cb = sender as ComboBox;
cb.IsDropDownOpen = false;
}
不,这不能解决问题。如果我第一次按enter键,仅在第二次按后才触发PreviewKeyDown。
private void Combobox_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox cb = sender as ComboBox;
cb.IsDropDownOpen = false;
}