登录失败时如何在没有数据绑定的情况下清除PasswordBox的内容?

2023-12-11

我有一个 wpf 应用程序,由于我无法控制的原因,我正在仔细遵循 mvvm 模式。出于我无法控制的安全原因,我不想将数据绑定到我的密码框。登录失败时如何清除密码框内容?我更喜欢在 xaml 中这样做的方法。


您可以创建您的attached DependencyProperty并将其用作 XAML 或在代码中。例子:

列表PasswordBehaviors:

public static class PasswordBehaviors
{
    public static void SetIsClear(DependencyObject target, bool value)
    {
        target.SetValue(IsClearProperty, value);
    }

    public static readonly DependencyProperty IsClearProperty =
                                              DependencyProperty.RegisterAttached("IsClear",
                                              typeof(bool),
                                              typeof(PasswordBehaviors),
                                              new UIPropertyMetadata(false, OnIsClear));

    private static void OnIsClear(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        if (e.NewValue is bool && ((bool)e.NewValue) == true)
        {
            PasswordBox MyPasswordBox = sender as PasswordBox;

            if (MyPasswordBox != null)
            {
                MyPasswordBox.Clear();
            }
        }
    }
}

与使用EventTrigger:

<EventTrigger SourceName="Clear" RoutedEvent="Button.Click">
    <BeginStoryboard>
        <Storyboard>
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="MyPasswordBox" Storyboard.TargetProperty="(local:PasswordBehaviors.IsClear)">
                <DiscreteObjectKeyFrame KeyTime="0:0:0">
                    <DiscreteObjectKeyFrame.Value>
                        <sys:Boolean>True</sys:Boolean>
                    </DiscreteObjectKeyFrame.Value>
                </DiscreteObjectKeyFrame>
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>
    </BeginStoryboard>
</EventTrigger>

与使用DataTrigger (in Style/DataTemplate/etc):

<DataTrigger Binding="{Binding ElementName=LoginElementFailed, Path=Status), Mode=OneWay}" Value="True">
    <Setter Property="(local:PasswordBehaviors.IsClear)" Value="True" />
</DataTrigger>

与使用Trigger (in Style):

<Trigger Property="LoginFailed.IsChecked" Value="True">
    <Setter Property="(local:PasswordBehaviors.IsClear)" Value="True" />
</Trigger>

使用后面的代码:

private void Clear_Click(object sender, RoutedEventArgs e)
{
    PasswordBehaviors.SetIsClear(MyPasswordBox, true);
}

完整示例:

XAML

<Window x:Class="ClearPasswordBox.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:ClearPasswordBox"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    Title="MainWindow" Height="350" Width="525"
    WindowStartupLocation="CenterScreen">

<Grid>
    <Grid.Triggers>
        <EventTrigger SourceName="Clear" RoutedEvent="Button.Click">
            <BeginStoryboard>
                <Storyboard>
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="MyPasswordBox" Storyboard.TargetProperty="(local:PasswordBehaviors.IsClear)">
                        <DiscreteObjectKeyFrame KeyTime="0:0:0">
                            <DiscreteObjectKeyFrame.Value>
                                <sys:Boolean>True</sys:Boolean>
                            </DiscreteObjectKeyFrame.Value>
                        </DiscreteObjectKeyFrame>
                    </ObjectAnimationUsingKeyFrames>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>

        <EventTrigger SourceName="ResetClear" RoutedEvent="Button.Click">
            <BeginStoryboard>
                <Storyboard>
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="MyPasswordBox" Storyboard.TargetProperty="(local:PasswordBehaviors.IsClear)">
                        <DiscreteObjectKeyFrame KeyTime="0:0:0">
                            <DiscreteObjectKeyFrame.Value>
                                <sys:Boolean>False</sys:Boolean>
                            </DiscreteObjectKeyFrame.Value>
                        </DiscreteObjectKeyFrame>
                    </ObjectAnimationUsingKeyFrames>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Grid.Triggers>

    <PasswordBox Name="MyPasswordBox" local:PasswordBehaviors.IsClear="False" Width="100" Height="30" />

    <Button Name="Clear" Width="100" Height="30" HorizontalAlignment="Right" Content="Clear" />

    <Button Name="ResetClear" Width="100" Height="30" HorizontalAlignment="Left" Content="ResetClear" />
</Grid>
</Window>

Code behind

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    //private void Clear_Click(object sender, RoutedEventArgs e)
    //{
    //    PasswordBehaviors.SetIsClear(MyPasswordBox, true);
    //}

    //private void ResetClear_Click(object sender, RoutedEventArgs e)
    //{
    //    PasswordBehaviors.SetIsClear(MyPasswordBox, false);
    //}
}

public static class PasswordBehaviors
{
    public static void SetIsClear(DependencyObject target, bool value)
    {
        target.SetValue(IsClearProperty, value);
    }

    public static readonly DependencyProperty IsClearProperty =
                                              DependencyProperty.RegisterAttached("IsClear",
                                              typeof(bool),
                                              typeof(PasswordBehaviors),
                                              new UIPropertyMetadata(false, OnIsClear));

    private static void OnIsClear(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        if (e.NewValue is bool && ((bool)e.NewValue) == true)
        {
            PasswordBox MyPasswordBox = sender as PasswordBox;

            if (MyPasswordBox != null)
            {
                MyPasswordBox.Clear();
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

登录失败时如何在没有数据绑定的情况下清除PasswordBox的内容? 的相关文章

随机推荐

  • 在 Express js 会话中存储实例

    我正在使用expressjs会话 并且我有一个实例需要存储 function a this name var ins new a req session user ins 当我下次得到 res session user 时 该对象不是ins
  • 如何自动将浏览器前缀添加到CSS3属性中?

    您可能知道 由于 CSS3 并不兼容所有浏览器 因此当我们使用 CSS3 时 我们应该为 CSS3 属性添加前缀 例如 moz webkit o 等 手动编写这些前缀很困难 那么 是否有任何插件 程序或其他东西可以检测我的 CSS 文件中的
  • Raspberry Pi - 自动启动 OpenCv 脚本 - cv::imshow() 错误

    简短的介绍 我想在启动后通过 systemd 服务脚本自动启动可执行文件 opencv 二进制文件 通过 c 生成 但我不成功 我将错误范围缩小到代码语句 cv imshow 该语句打开一个窗口并显示图像 此时 代码抛出错误 QXcbCon
  • Facebook 帐户取消链接或取消授权 Facebook 应用程序并检查 Facebook 应用程序的链接状态

    我的网站应用程序具有通过 Facebook 登录进行登录的功能 为此 我的应用程序出现在 Facebook 上 使用 Facebook 登录工作正常 但应用程序具有将 Facebook 帐户链接和取消链接到 Facebook 应用程序的功能
  • Linux 中的 Windows 命名管道支持 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在研究一个项目 该项目需要使用命名管道的旧版 Windows 应用程序与在 Linux 服务器上运行的新服务之间进行进程间通信 Windows
  • 关于如何在 iOs 4 中录制视频的基本说明

    嘿伙计们 我很好奇是否有人可以给我一个关于如何在 iOs 4 中制作应用程序录制视频的非常简短的描述 我知道如何使用 os 3 的 UIImagePickerController 方法来处理所有媒体以及诸如此类的事情 但我不知道如果 iOs
  • Java数学表达式解析器可以将复数作为变量?

    我正在写一个程序加工转换复数 但是 我想要一种获取输入字符串并使用复杂变量计算转换的方法 例如 1 z 1 z 2 z 2 其中 z 是复数 现在 我看了 JEP 和一些examples 但我无法确定它是否允许您实际输入 z 作为变量 并且
  • Elasticsearch RestHighLevelClient 缺少传递依赖项

    我正在尝试通过此依赖项使用 RestHighLevelClient
  • 如何获取转换后的 HTML5 Canvas 上的鼠标位置

    我正在尝试获取鼠标在变换后的画布上的位置 这是我的调整大小方法 window addEventListener resize resize function resize screenWidth window innerWidth scre
  • 具有多个文件的自定义表单数据到 Web API 控制器

    我在获取 API 控制器中指定的所有表单数据时遇到问题 JavaScript 上传功能 scope upload index upload upload url api upload method POST data Photographe
  • 通过完整记录握手来破坏 TLS 安全

    我最近一直在研究 TLS 我不确定它为什么如此安全 但可能是由于对其工作原理的误解 但是 如果记录了整个握手过程 无论是使用中间人攻击还是目标计算机上的数据包嗅探器 那么任何剩余的通信都可以被解密 因为您将拥有客户端和服务器用来生成的所有信
  • Polly WaitAndRetryAsync 与 WaitAndRetry

    我正在 NET Core WebAPI 项目中研究重试逻辑 我正在使用pollyWaitAndRetryAsync WaitAndRetry方法 有什么区别WaitAndRetryAsync vs WaitAndRetry 以及什么时候应该
  • 如何使用 FxCop 自定义规则验证 DataReader 实际上已关闭?

    我为 FxCop 1 36 编写了一些自定义规则 我编写了代码来查找打开的 DataReader 是否关闭的情况 但它不会检查哪个 DataReader 对象正在调用Close 方法 所以我无法确定所有打开的 DataReader 对象是否
  • 宏未显示在运行宏菜单中

    我开始学习 VBA 但我不明白为什么从互联网复制粘贴的一些宏没有显示在运行宏菜单 Alt F8 中 下面有 2 个宏 但只显示第二个 为什么 我该如何解决它 Sub Test1 ByVal Target As Hyperlink End S
  • 增强类序列化,成员类型的变化

    如何处理序列化成员类型的切换 同时保持与先前存档的兼容性 例如 我想改变float int to double size t 我知道我可以增加版本号 但这会使代码变得混乱 有不同的方法来处理吗 如果有区别 成员将通过以下顺序进行序列化MAK
  • 通过数组运算有效搜索包含子排列的排列?

    我有一组整数 比如 S 1 10 以及两个矩阵 N 和 M 它们的行是 S 阶元素的一些 但不一定是所有可能的 排列 比如 3 和分别为 5 个 例如N 1 2 3 2 5 3 M 1 2 3 4 5 2 4 7 8 1 排列 P 的子排列
  • Spark 中的嵌套并行化?正确的做法是什么?

    嵌套并行化 假设我正在尝试在 Spark 中执行相当于 嵌套 for 循环 的操作 就像在常规语言中一样 假设我在内部循环中有一个例程 可以以这种方式估计 PiPi Average Spark 示例确实如此 请参阅估计 Pi i 1000
  • Python lmfit 约束:a < b < c

    我在用lmfit在Python中拟合一些数据 其中包括拟合变量a b和c 我需要确保 a http cars9 uchicago edu software python lmfit MinimizerResult constraints h
  • Android 和 Proguard?

    我正在尝试在我的 Android 应用程序中使用 proguard proguardGui 接受一个输入和一个输出 输入需要一个 jar 文件 但是android的APK文件不包含任何jar 我尝试传递 apk 文件以及 apx 内的 de
  • 登录失败时如何在没有数据绑定的情况下清除PasswordBox的内容?

    我有一个 wpf 应用程序 由于我无法控制的原因 我正在仔细遵循 mvvm 模式 出于我无法控制的安全原因 我不想将数据绑定到我的密码框 登录失败时如何清除密码框内容 我更喜欢在 xaml 中这样做的方法 您可以创建您的attached D