如何在 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)。
我在 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):
KeyDown
won't fire anymore 来阻止它
private void passwordbox_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Space)
{
e.Handled = true;
}
}
如果您需要阻止某个事件,您将使用以“预览”开头的事件(阅读更多内容 here)。