【问题标题】:How to make PasswordBox ReadOnly in UWP?如何在 UWP 中将 PasswordBox 设为只读?
【发布时间】:2019-10-23 03:58:24
【问题描述】:

我正在制作一个 PasswordBox,当光标悬停在 PasswordBox 上时,它会公开特定帐户的密码。但是,这纯粹是为了查看目的,我不希望用户能够编辑密码。

我怎样才能像使用文本框一样使 PasswordBox 只读?我知道它没有要设置的相同属性,但是 UWP 中的 PasswordBoxes 是否可以解决?

这是我目前所拥有的: 查看.xaml

<PasswordBox x:Name="Password" Password="{x:Bind Acct.Password}" CornerRadius="5" PointerEntered="Password_PointerEntered"
     PointerExited="Password_PointerExited" VerticalAlignment="Center" FontSize="20" Width="175"  />

View.xaml.cs

        private void Password_PointerEntered(object sender, PointerRoutedEventArgs e)
        {
            var pb = sender as PasswordBox;
            pb.PasswordRevealMode = PasswordRevealMode.Visible;
        }

        private void Password_PointerExited(object sender, PointerRoutedEventArgs e)
        {
            var pb = sender as PasswordBox;
            pb.PasswordRevealMode = PasswordRevealMode.Hidden;
        }

到目前为止,我尝试过让 PasswordBox 在通过单击编辑获得焦点后失去焦点,但在那里没有太多运气。有没有办法在事件发生时取消它们?

非常感谢任何帮助!

【问题讨论】:

    标签: c# xaml uwp


    【解决方案1】:

    您可以对PasswordChanged 事件做出反应并使用它来将您的PasswordBox.Password 属性设置为初始值,例如:

    private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e) {
        Password.Password = "cannot-be-changed password";
    }
    

    您还可以使用IsHitTestVisible="False""Focusable="False" 标记使您的PasswordBox 免疫焦点。这不会阻止用户修改密码,但会指示他不支持此操作。不过,这可能会影响您的 PointerEnteredPointerExited 事件。

    【讨论】:

    • 刚刚尝试了 IsHitTestVisible,你是对的,它阻止了指针事件的工作。我还注意到我没有可聚焦的选项。这仅在 WPF 中可用吗?我在 UWP 中找不到它。如果我也没有尝试使用指针事件,这个解决方案肯定有效,所以谢谢你的回答!
    【解决方案2】:

    您可以使用PreviewKeyDown 事件并捕获所有按下的键。

    <PasswordBox PreviewKeyDown="OnPreviewKeyDown" />
    
    private void OnPreviewKeyDown(object sender, KeyRoutedEventArgs e)
    {
        e.Handled = true;
    }
    

    【讨论】:

    • 这实际上对不允许输入有效,尽管它仍然允许选择框。不过,感谢您的回答,这非常有帮助,只是没有完全满足我的应用程序的需求。会竖起大拇指并将我发现的解决方案添加到我的具体问题中。
    【解决方案3】:

    通过其他答案的大力帮助,我解决了与我类似的 2 个其他问题,我能够为我的特定应用找到解决方案。

    在 XAML 中的 PasswordBox 上使用 AllowFocusOnInterface="False",我实现了在悬停时显示密码的功能,并使其用户无法单击和编辑 PasswordBox。

    感谢大家的帮助!希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2017-08-05
      • 2014-07-07
      • 2018-01-29
      • 2017-03-02
      • 2013-10-02
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多