如何创建一个输入范围仅接受数字的PasswordBox ?

本文关键字:数字 PasswordBox 范围 一个 何创建 创建 输入 | 更新日期: 2023-09-27 18:11:20

这似乎是Windows Phone的一个明显疏忽。<PasswordBox />控件不允许指定InputScope

我需要显示PasswordBox作为自定义密码输入屏幕的一部分(例如图像和按钮),并显示一个数字键盘,只允许数字输入。

Coding4Fun的PasswordInputPrompt允许数字输入,但它是不可定制的,因为我不能在它周围建立一个自定义布局,它只允许Title &Message值。

我有什么办法做这件事吗?

如何创建一个输入范围仅接受数字的PasswordBox ?

你最好创建自己的用户控件。

xaml看起来像这样:

<Grid x:Name="LayoutRoot">
    <TextBox x:Name="PasswordTextBox" InputScope="Number" MaxLength="{Binding MaxLength, ElementName=UserControl}" KeyUp="PasswordTextBox_KeyUp"/>
</Grid>

后面的代码可以是这样的:

public partial class NumericPasswordBox : UserControl
{
    #region Password 
    public string Password
    {
        get { return (string)GetValue(PasswordProperty); }
        set { SetValue(PasswordProperty, value); }
    }
    // Using a DependencyProperty as the backing store for Password.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty PasswordProperty =
        DependencyProperty.Register("Password", typeof(string), typeof(NumericPasswordBox), new PropertyMetadata(null));
    #endregion
    #region MaxLength
    public int MaxLength
    {
        get { return (int)GetValue(MaxLengthProperty); }
        set { SetValue(MaxLengthProperty, value); }
    }
    // Using a DependencyProperty as the backing store for MaxLength.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty MaxLengthProperty =
        DependencyProperty.Register("MaxLength", typeof(int), typeof(NumericPasswordBox), new PropertyMetadata(100));
    #endregion
    public NumericPasswordBox()
    {
        InitializeComponent();
    }
    private void PasswordTextBox_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
    {
        Password = PasswordTextBox.Text;
        //replace text by *
        PasswordTextBox.Text = Regex.Replace(Password, @".", "●");
        //take cursor to end of string
        PasswordTextBox.SelectionStart = PasswordTextBox.Text.Length;
    }
}

你可以自定义任何你想要的,使用依赖属性,如MaxLength,如示例所示。

遗憾的是,PasswordBox控件没有从TextBox控件继承,所以它不支持InputScope。我认为最好的方法是创建一个新的控件。

我同意你的观点,这有点令人沮丧,因为Windows Phone已经有这种类型的控制(锁定屏幕密码)。

请随意尝试我的新的和易于使用的Windows Phone NumericPassword组件。

它基于基本的在线示例,但在GUI中更好地支持值编辑(例如插入定位,覆盖选定部分),以提供更好的用户体验。