WPF 密码框按下和抬起事件

PasswordBox控件本身是没有办法显示自己输入的文本。只能通过一定的辅助事件才能看到。

这是我的界面:

 在这里我通过旁边的眼睛按钮来辅助passwordbox控件显示其原本密码。

这里的定义了MouseLeftButtonDown和MouseLeftButtonUp事件

 <Button x:Name="SeePwd" MouseLeftButtonDown="SeePwd_MouseLeftButtonDown" MouseLeftButtonUp="SeePwd_MouseLeftButtonUp"/>
         

原理:通过眼睛按钮的抬起与按下事件,让位置跟passwordbox重叠的textbox显示出来,并让passwordbox数据显示到textbook控件中。

代码如下

    //小眼睛按钮的按下和谈起事件
      private void SeePwd_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            text.ButtonDown(Pwd, TxtPwd);
        }

        private void SeePwd_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            text.ButtonUp(Pwd, TxtPwd);
        }


//具体代码封装成了工具类


         /// <summary>
        /// 鼠标抬起事件
        /// </summary>
        /// <param name="pwd"></param>
        /// <param name="txt"></param>
        public void ButtonUp(PasswordBox pwd, TextBox txt)
        {

            pwd.IsEnabled = true;
            pwd.Visibility = Visibility.Visible;
            txt.IsEnabled = false;
            txt.Visibility = Visibility.Hidden;
        }
        /// <summary>
        /// 鼠标按下事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void ButtonDown(PasswordBox pwd, TextBox txt)
        {
            txt.Text = pwd.Password;
            txt.IsEnabled = true;
            txt.Visibility = Visibility.Visible;
            pwd.IsEnabled = false;
            pwd.Visibility = Visibility.Hidden;
        }

存在问题:

如果正常的写,程序中无法响应这个事件,打了断点才发现根本就没有走这个事件。

解决方法

查看了一些资料,才知道这是一个设计原则上的问题。控件在捕获了MouseLeftButtonDown事件后,会将该事件的“Handled”设置为True,这个属性是用在事件路由中的,当某个控件得到一个RoutedEvent,就会检测Handled是否为true,为true则忽略该事件。并且,控件本身的Click事件,相当于将MouseLeftButtonDown事件抑制(Supress)掉了,转换成了Click事件。所以,如果一定要使用这个事件的话,需要在初始化的函数里利用UIElement的AddHandler方法,显式的增加这个事件。

在程序的页面初始化时加上AddHandler方法。

 public ModefiyPwd()
        {
            InitializeComponent();
            SeePwd.AddHandler(Button.MouseLeftButtonDownEvent, new MouseButtonEventHandler(this.SeePwd_MouseLeftButtonDown), true);
            SeePwd.AddHandler(Button.MouseLeftButtonUpEvent, new MouseButtonEventHandler(this.SeePwd_MouseLeftButtonUp), true);
            
        }

移步这里

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值