【问题标题】:Turn off autoComplete in Combobox in wpf在 wpf 的组合框中关闭自动完成
【发布时间】:2013-11-29 17:57:16
【问题描述】:

我正在使用 .NET Framework 4.0 来构建我的应用程序。

我有一个组合框,我想在其中关闭组合框的建议附加模式。相反,我想要仅建议模式。

在用户询问关闭自动完成功能的许多问题中,我得到了相同的答案。即将 IsTextSearchEnabled 设置为 False。

当 IsTextSearchEnabled = True 时

当 IsTextSearchEnabled = False 时

我想要的是:

当用户在组合框上按 Enter 键时,我希望将项目附加到组合框的文本框中。

这在 WPF 中是否可行?

【问题讨论】:

  • 有可能。收听 TextBox 的 TextChanged,每当 Text 不等于您输入的文本时,只需将其替换为您输入的文本即可。这就是您将如何仅将文本保留在 TextBox 中的方式。虽然当按下回车时,然后将 SelectedItem 放在 TextBox 中。
  • 收听 TextBox 的 TextChanged 是什么意思,每当文本不等于您输入的文本时,只需将其替换为您输入的文本?能给我一个演示示例吗?
  • 是的,我会给你一个演示。我的意思是它是您输入的文本框。当您查看 ComboBox 的 ControlTemplate 时,您将找出文本框的部件名称。然后,您可以从字面上获取 TextBox 的实例并收听 TextChanged 事件。当您开始键入时,组合框将搜索最佳匹配并将您输入的文本替换为最佳匹配文本。为避免这种情况,只需始终将您的文本推送为 TextBox 的当前文本。我就是这么说的。我会在答案中为您发布一个演示。
  • 我没有在 ComboBox 上找到任何 TextChanged 事件。
  • 我在 ComboBox 上找到了 TextChangedEvent。它是TextBoxBase.TextChanged = "YourEventHandler"。但我不知道实现。

标签: wpf silverlight xaml combobox


【解决方案1】:

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

检查一下:

<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();
    }
}

【讨论】:

  • 很抱歉,但我没有看到输出有任何变化。我的输出看起来与问题中的第一张图片相同。
  • 我注意到一个变化,当我按下向上或向下箭头键时,文本框的文本在第一次按下箭头键时会发生变化,但之后无论我按多少次箭头键文本文本框中的内容不会改变,但项目的选择会通过向上或向下箭头键改变。
  • 它对我有用。当我打开 ComboBox 并开始输入时,自动完成功能被关闭。你到底在用 ComboBox 做什么?
  • 我的错。我曾尝试在 TextBoxBase.PrevwKeyDown 和 TextBoxBase.TextChanged 中执行此操作。现在让它工作,但出现了另一个问题。现在所有 TargetType 为 ComboBox 的资源都不适用于这个。而且每件事都不像以前那样工作了。
  • 嗨,很高兴它现在对你有用。如果我能够帮助您解决自动完成问题,请随时将其标记为答案或投票。其次,是的,我不知道您已经定义了样式,尽管您必须更改 targettype 并且一切都会再次起作用。
猜你喜欢
  • 2015-03-13
  • 2013-05-24
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-19
  • 2011-08-07
相关资源
最近更新 更多