如何限制组合框中的用户输入,以便您只能输入集合中的单词?

Daa*_*nvl 7 c# wpf-controls

为了澄清我有一个组合框,其可观察的集合绑定到其itemsource属性.我希望用户只能输入集合中存在的项目.同时保持

    IsTextSearchEnabled="true"
Run Code Online (Sandbox Code Playgroud)

功能.所以我一直在网上寻找一个如何做到这一点的例子.直到现在我想我应该使用

    <ComboBox TextInput="cbb1_TextInput" />
Run Code Online (Sandbox Code Playgroud)

事件然后搜索集合.但我虚弱的尝试不能维持自动完成功能,selectedindex混乱和其他不需要的行为.因为我是wpf中的一个菜鸟,我想知道是否有只使用XAML部分的解决方案?

编辑: 我尝试过这样的事情:

     private void fase1cbb1_KeyUp(object sender, KeyEventArgs e)
     {
        ComboBox cb = (ComboBox)sender;
        bool match = false;
        TextBox tb = (TextBox)cb.Template.FindName("PART_EditableTextBox", cb);
        if (tb.Text.Length > 0)
        {
            foreach (MenuItem MI in cb.Items)
            {
                if (MI.Text.StartsWith(tb.Text))
                {
                    match = true; ;
                }
            }
            if (!match)
            {
                int len = tb.Text.Length;
                if (len > 0)
                {
                    tb.Text = tb.Text.Substring(0, len - 1);
                    tb.SelectionStart = len;

                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是一旦没有匹配,就没有更多的选定项目,也没有更多的自动完成/文本搜索.

thnx任何建议或例子.

解决方案: 带有IsEditable ="True"的WPF ComboBox - 如何指示未找到匹配项?

Mic*_*eld 3

如果您一直向下滚动到MSDN 上ComboBox文档的底部,您会发现有一个非常简单的可能答案:将您的设置ComboBox.IsEditable为 false。用户仍然可以通过在框中键入前缀来选择编辑器中的项目,但他们只能输入列表中已出现的值。

缺点是您无法获得任何正常的“文本框”行为,特别是您无法将所选项目复制/粘贴到组合框中。如果这对您来说也是一个问题,请告诉我们,但这无论如何都是 Windows 中 DropDownList 样式 ComboBox 的典型行为。