【发布时间】:2015-05-05 09:02:34
【问题描述】:
我研究了一下,似乎 xaml 中没有 InputScope 用于密码框。我正在设置一个 pin 字段,只想要数字。如果图我将需要检查按下的键是否是 C# 中的数字,然后再将其写入框。我该怎么做呢?它还将检查长度是否为 4,以便它可以自动登录,我已经知道该怎么做。
【问题讨论】:
标签: c# xaml windows-store-apps windows-8.1
我研究了一下,似乎 xaml 中没有 InputScope 用于密码框。我正在设置一个 pin 字段,只想要数字。如果图我将需要检查按下的键是否是 C# 中的数字,然后再将其写入框。我该怎么做呢?它还将检查长度是否为 4,以便它可以自动登录,我已经知道该怎么做。
【问题讨论】:
标签: c# xaml windows-store-apps windows-8.1
您可以在PasswordBox 上订阅KeyDown 事件。最大长度可以通过设置MaxLength属性来限制。
private void OnKeyDown(object sender, KeyEventArgs e)
{
if ((e.Key >= Key.D0 && e.Key <= Key.D9) || (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9))
return;
e.Handled = true;
}
【讨论】:
@edited
Xaml:
<PasswordBox x:Name="passwordBox" MaxLength="4" PasswordChanged="PasswordBox_PasswordChanged"/>
private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e)
{
string password = "pass";
int result;
bool isPasswordNumeric = int.TryParse(password , out result);
if (!isPasswordNumeric)
return;
}
【讨论】:
每次更改密码时,即每次击键时,您都可以丢弃所有非数字字符。用户的体验是控件只响应数字字符。
private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e)
{
var passwordBox = sender as PasswordBox;
string inputString = passwordBox.Password;
string cleanString = Regex.Replace(inputString, @"[^0-9]", "");
passwordBox.Password = cleanString;
return;
}
请注意,正则表达式中的插入字符 (^) 会否定搜索字段,即它将除 0-9 之外的所有字符替换为空字符串。
使用 Pawel Maga 帖子中的 XAML。
【讨论】: