关闭WPF中Combobox的自动完成功能

3
我正在使用.NET Framework 4.0构建我的应用程序。
我有一个组合框,我想关闭组合框的建议附加模式。相反,我想要建议模式。
在许多问题中,用户要求关闭自动完成功能,而我得到了同样的答案。即将IsTextSearchEnabled设置为False。
当IsTextSearchEnabled = True时
当IsTextSearchEnabled = False时
我想要的是:
当用户在组合框上按Enter键时,我希望该项被附加到组合框的文本框中。
这个在WPF中可行吗?

可以实现。监听TextBox的TextChanged事件,每当文本不等于您输入的文本时,将其替换为您输入的文本。这样,您就可以在TextBox中仅保留您的文本。但是,当按下Enter键时,请获取SelectedItem并将其放置在TextBox中。 - dev hedgehog
你是指监听TextBox的TextChanged事件,每当文本不等于你输入的文本时,就用你输入的文本替换它吗?你能给我一个演示例子吗? - Khushi
好的,我会给你演示一下。我的意思是指文本框,你可以在ComboBox的ControlTemplate中找到TextBox的部件名称。然后,你就可以获取TextBox的实例并监听TextChanged事件。当你开始输入时,ComboBox将搜索最佳匹配项,并用最佳匹配项的文本替换你输入的文本。为了避免这种情况,你只需要始终将你的文本推送为TextBox的当前文本即可。这就是我的意思。我会在回答中给你发布一个演示。 - dev hedgehog
我在 ComboBox 上没有找到任何 TextChanged 事件。 - Khushi
我在ComboBox上找到了TextChangedEvent。它是TextBoxBase.TextChanged = "YourEventHandler"。但我不知道具体实现。 - Khushi
我给你发了一个例子,请查看。 - dev hedgehog
1个回答

4

像承诺的那样,这里是演示。正如您所看到的,我做了我在评论中解释的事情。我监听了文本更改事件。

来看看吧:

<Grid>
    <local:MyComboBox x:Name="comboBox" IsEditable="True"
              VerticalAlignment="Center"
              IsTextSearchEnabled="True">
        <ComboBoxItem>hello</ComboBoxItem>
        <ComboBoxItem>world</ComboBoxItem>
        <ComboBoxItem>123</ComboBoxItem>
    </local:MyComboBox>
</Grid>

public class MyComboBox : ComboBox
{
    private string myValue;
    private bool needsUpdate;

    public override void OnApplyTemplate()
    {
        TextBox tbx = this.GetTemplateChild("PART_EditableTextBox") as TextBox;

        tbx.PreviewKeyDown += (o, e) =>
        {
            this.needsUpdate = true;
        };

        tbx.TextChanged += (o, e) =>
            {
                if (needsUpdate)
                {
                    myValue = tbx.Text;
                    this.needsUpdate = false;
                }
                else
                {
                    tbx.Text = myValue;
                }
            };

        base.OnApplyTemplate();
    }
}

很抱歉,但我没有看到输出有任何变化。我的输出看起来与问题中的第一张图片相同。 - Khushi
我注意到一个变化,当我按上下箭头键时,文本框的文本会在第一次按下箭头键时更改,但之后无论我按多少次箭头键,文本框中的文本都不会再更改,但是通过按上下箭头键可以更改所选项目。 - Khushi
它对我有效。当我打开ComboBox并开始输入时,自动完成功能被关闭了。你在ComboBox上具体做了什么? - dev hedgehog
我的错,我尝试在TextBoxBase.PreviwKeyDown和TextBoxBase.TextChanged中进行操作。现在我已经搞定了,但又出现了另一个问题。现在所有TargetType为ComboBox的资源都不适用于此控件。而且一切都不像以前那样正常工作了。 - Khushi
嗨,很高兴现在它能为您工作。如果我能帮助您解决自动完成问题,请随意将其标记为答案或投票支持。其次,是的,我不知道您已经定义了样式,尽管您需要更改目标类型,然后所有内容都将再次正常工作。 - dev hedgehog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接