关于WPF PasswordBox

在WPF中,想要实现密码输入框,通常使用PasswordBox,但是PasswordBox没有提供简单的设置输入提示的方法,想要实现此功能,通常需要通过模版,查了网上的很多实现,感觉都比较复杂,需要绕很多的数据模版、ui模版。秉持代码能少则少的原则,通过DynamicResource实现了一个简易版本的带输入提示的密码输入框,对WPF熟练度还不是很高,贴出代码供大家参考,欢迎大神指出代码不足。

xaml代码如下:

        
            
                
                    
                        
                    
                
            
        

cs代码如下:

        private void pwd_PasswordChanged(object sender, RoutedEventArgs e)
        {
            if (pwd.Password.Length <= 0)
            {
                Resources["HintText"] = "请输入密码";
                okBtn.IsEnabled = false;
            }
            else
            {
                Resources["HintText"] = "";
                okBtn.IsEnabled = true;
            }
        }

这段代码的原理:
1.在xaml中通过PasswordBox.Background的VisualBrush为PasswordBox设置一个TextBlock类型的背景,此背景通过动态资源(DynamicResource)设置提示文字
2.当密码输入框内容变化时,更改动态资源的内容,以做到在有内容输入时隐藏TextBlock的效果(其实这里的TextBlock并没有隐藏,只是输入空内容之后像是TextBlock被隐藏一样),另一种思路就是把Visibility属性做成动态资源,在密码输入框内容变化时动态改变Visibility为Visible或Hidden

以下为我的密码输入框效果图
关于WPF PasswordBox_第1张图片关于WPF PasswordBox_第2张图片
另外在PasswordBox控件中,如果粘贴密码想要定位焦点,不能像TextBox那样使用Select(text.Lenth, 0),因为PasswordBox没有Select方法,而是应该如下所示:

pwdBox.GetType().GetMethod("Select", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).Invoke(pwdBox, new object[] { pwdBox.Password.Length, 0 });

你可能感兴趣的:(客户端,wpf)