如何在 wpf 的密码框中阻止 space

How to block space in passwordbox in wpf

我在 wpf 中使用 PasswordBox 控件。

我想在控件中屏蔽space,但是找不到方法。 我尝试使用 KeyDown 事件,但该事件不起作用。

在 PasswordBox 中阻止 space 的最佳方法是什么?

对于 WPF 你应该使用 PreviewKeyDown 基于 docs 发生在 KeyDown 事件之前当焦点在此控件上时按下一个键。

XAML:

<PasswordBox x:name="txtPasscode" PreviewKeyDown="txtPasscode_PreviewKeyDown"/>

在后面:

private void txtPasscode_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Space && txtPasscode.IsFocused == true)
            {
                e.Handled = true;
            }
        }

同样在 C# 原生中试试这个:

 private void txtPasscode_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == ' ') e.Handled = true;
    }

您正在处理的 KeyDown 事件实际上是在字符添加到密码框后触发的。如果用户按下 space):

,您可以通过处理 PreviewKeyDown this way(KeyDown won't fire anymore 来阻止它
private void passwordbox_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Space)
    {
        e.Handled = true;
    }
}

如果您需要阻止某个事件,您将使用以“预览”开头的事件(阅读更多内容 here)。