无法访问 KeyEventArgs 的 SuppressKeyPress 属性

SuppressKeyPress Property of KeyEventArgs not accessible

在花了 90 分钟寻找这个简单问题的解决方案后,我不得不 post 羞愧地提出一个问题。

我正在处理用户输入文本的 WPF 项目。我想在用户输入时检查输入,显示工具提示并理想地阻止不允许的字符。基本上是这个线程:

How do I validate characters a user types into a WinForms textbox? 或这个

Is there a best practice way to validate user input?

private void NameTextbox_KeyDown(object sender, KeyEventArgs e)
    {
        e.???
    }

我通过双击设计器中的 KeyDown-属性 字段在后面创建了这段代码(如果我在那里搞砸了,请提及这一点)。

Screenshot of the Property Window

我无法访问 e.SupressKeyPress 属性。为什么? 至于 VS 提供的属性,我认为 e 是错误的类型或在错误的上下文中。

Intellisense Screenshot

编辑1

private void NameTextbox_KeyDown(object sender, KeyEventArgs e)
    {
        var strKey = new KeyConverter().ConvertToString(e.Key);
        if (!strKey.All(Char.IsLetter))
        {
            MessageBox.Show("Wrong input");
            e.Handled = true;
        }
    }

多亏了@rokkerboci,我才能够构建出这样的作品。 但我认为它过于复杂。所以仍然欢迎改进:)

新错误创建消息框时应用程序挂起,没有抛出异常。

您正在使用 WPF,其中 包含 WindowsForms 特定的 SupressKeyPress 属性.

您可以在 WPF 中执行此操作,方法是使用 KeyDown 事件,并将 KeyEventArgs.Handled 属性 设置为 true(它告诉处理程序,它不必对此事件执行任何操作.)

private void NameTextbox_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Delete)
    {
        MessageBox.Show("delete pressed");
        e.Handled = true;
    }
}

编辑:

我找到了您问题的完美答案:

C#:

char[] invalid = new char[] { 'a', 'b' };

private void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
    foreach (var item in invalid)
    {
        if (e.Text.Contains(item))
        {
            e.Handled = true;
            return;
        }
    }
}

private void TextBox_Pasting(object sender, DataObjectPastingEventArgs e)
{
    var text = e.DataObject.GetData(typeof(string)).ToString();

    foreach (var item in invalid)
    {
        if (text.Contains(item))
        {
            e.CancelCommand();
            return;
        }
    }
}

XAML:

<TextBox PreviewTextInput="TextBox_PreviewTextInput" DataObject.Pasting="TextBox_Pasting" />