【问题标题】:C# / WPF Unmask password inside the passwordBoxC# / WPF 在密码框内取消屏蔽密码
【发布时间】:2015-09-11 11:30:09
【问题描述】:

当我单击复选框时,如何取消屏蔽和屏蔽密码框中的密码?我正在使用 C# WPF 模板。

这是我的 .XAML 代码:

<PasswordBox x:Name="passwordBox_password" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" Margin="5" Height="25" />
        <CheckBox x:Name="checkBox_showPassword" Grid.Row="3" Grid.Column="1" Margin="5,0,5,5" Content="show password" Checked="checkBox_showPassword_Checked" Unchecked="checkBox_showPassword_Unchecked" />

这是我的 .CS 代码:

private void checkBox_showPassword_Checked(object sender, RoutedEventArgs e)
    {
        // what to do here ?
    }

    private void checkBox_showPassword_Unchecked(object sender, RoutedEventArgs e)
    {
        // what to do here ?
    }

或者在 WPF 中有其他方法吗?

【问题讨论】:

标签: c# wpf checkbox passwords passwordbox


【解决方案1】:

以下链接将带您找到您正在寻找的答案,我的好先生。拉马斯先生在回答方法方面做得很好,所以我宁愿将您重定向到答案:)

showing password characters on some event for passwordbox

【讨论】:

  • 那里的 cmets 告诉我们这不再起作用了
【解决方案2】:

这样做非常简单。 首先,您应该在 PasswordBox 中添加值 PasswordChar

<PasswordBox Name="PasswordHidden" PasswordChar="•"/>

接下来,您应该在 PasswordBox 标签下添加一个将 Visibility 值设置为 Hidden 的 TextBox:

<TextBox Name="PasswordUnmask" Visibility="Hidden"/>

以及显示/隐藏密码的触发器,例如简单的文本或按钮。就我而言,我使用的是简单的文本。

<TextBlock Name="ShowPassword"/>

接下来你需要在触发器元素中添加3个不同的事件,例如(这对TextBlock或Image有效,如果你想使用一个Button你应该选择另一个事件):

<TextBlock x:Name="ShowPassword" Text="SHOW" PreviewMouseDown="ShowPassword_PreviewMouseDown" PreviewMouseUp="ShowPassword_PreviewMouseUp" MouseLeave="ShowPassword_MouseLeave"/>

事件是 PreviewMouseDown PreviewMouseUpMouseLeave 但您可以根据自己的情况选择合适的事件。

现在您需要在代码中编写函数:

private void ShowPassword_PreviewMouseDown(object sender, MouseButtonEventArgs e) => ShowPasswordFunction();
private void ShowPassword_PreviewMouseUp(object sender, MouseButtonEventArgs e) => HidePasswordFunction();
private void ShowPassword_MouseLeave(object sender, MouseEventArgs e) => HidePasswordFunction();

private void ShowPasswordFunction()
{
    ShowPassword.Text = "HIDE";
    PasswordUnmask.Visibility = Visibility.Visible;
    PasswordHidden.Visibility = Visibility.Hidden;
    PasswordUnmask.Text = PasswordHidden.Password;
}

private void HidePasswordFunction()
{
    ShowPassword.Text = "SHOW";
    PasswordUnmask.Visibility = Visibility.Hidden;
    PasswordHidden.Visibility = Visibility.Visible;
}

【讨论】:

  • 这对我来说非常有效——即使绑定到“ShowPasswordTextBox”——这样我就可以像往常一样使用绑定来处理密码。
【解决方案3】:

我建议使用 MahApps.Metro ...从 nuget.org 安装后 ...您必须像这样在 xaml 的头部使用它 xmlns:controls="http://metro.mahapps.com/winf/xaml/controls"

然后...只需将其样式用于您的 PasswordBox 控件

<PasswordBox  Style="{StaticResource MetroButtonRevealedPasswordBox}" />

您甚至可以使用控件更改显示图标的内容:PasswordBoxHelper.RevealButtonContent 附加属性

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    相关资源
    最近更新 更多