问题:我无法在ComboBox中输入自定义文字,然后按输入关闭下拉列表,因为我的书面自定义文本会被所选项目覆盖下拉列表。
我使用 editable = true 和 isTextSearchEnabled = true ComboBox 以及字符串列表:
<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>
TextChanged:如果文本被更改,则打开组合框下拉列表
private void cmbTextField_TextChanged(object sender, TextChangedEventArgs e)
{
var cmbx = sender as ComboBox;
//Open the dropdwon
cmbx.IsDropDownOpen = true;
}
如何解决问题:
(但如果我按选项卡而不是回车,它会正常工作) 有谁知道如何解决这个问题?
答案 0 :(得分:0)
您可以尝试订阅OnPreviewKeyDown方法,该方法将在处理按键之前触发。调用该方法时,您可以检查按下的键是否返回并将其标记为已处理。
这方面应该做的事情:
private void cmbTextField_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) {
if (e.KeyData == Keys.Return) {
e.Handled = true;
}
}
请记住,此代码未经过测试。
答案 1 :(得分:0)
我知道自发布以来已经很长时间了,但是我通过注册事件:SelectionChanged并关闭下拉菜单来解决它:
private void Combobox_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox cb = sender as ComboBox;
cb.IsDropDownOpen = false;
}