Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Wpf可编辑组合框:如何通过按enter键向列表中不存在的组合框输入新文本_C#_.net_Wpf_Xaml_Combobox - Fatal编程技术网

C# Wpf可编辑组合框:如何通过按enter键向列表中不存在的组合框输入新文本

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

问题:我无法在组合框中输入自定义文本,并按enter关闭下拉列表,因为我写入的自定义文本被下拉列表中的选定项覆盖

我使用一个带有字符串列表的editable=trueisTextSearchEnabled=true组合框

<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>
如何解决问题:

  • 输入第一个字母,例如:“A”。->它打开下拉列表并选择以A开头的第一个名称
  • 在找到的名称末尾键入一些附加字母(以获取不在列表中的新字符串)
  • 按Enter键关闭下拉窗口,我的自定义文本将被列表中选定的文本覆盖
  • (但如果我按TAB而不是Enter键,它工作正常) 有人知道如何解决这个问题吗

  • 更新: 问题似乎与IsTextSearchEnabled=true属性有关
    您可以尝试订阅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;
    }