2012-04-23 70 views
6

Windows窗体中的文本框用于拥有PasswordChar属性。在WPF中有一个额外的控件:PasswordBox。这不会是一个问题,但我的应用程序运行在仅有触摸屏的设备上。不幸的是,密码框不支持屏幕键盘。我想知道是否有将口令字符功能添加到标准文本框的方法。TextBox密码字符

+1

与[此问题]几乎相同(http://stackoverflow.com/questions/4612757/how-do-i-change-the-on-screen-keyboard-for-a-passwordbox) – 2012-04-23 14:50:06

+0

不,那已与我的问题完全没有关系。我在Windows上谈论WPF,另一个问题是关于Windows Phone的Silverlight。 – David 2012-04-23 14:53:50

回答

4

This answer可能会为您提供您所需要的。

+1

起初,我试图写我自己的控制,但是在插入符的位置,字符删除和文本选择上带来一些问题。因此,我以一种稍微不同的形式使用了这个答案。我将密码箱后面的文本框隐藏起来,并在密码箱变得焦点时聚焦文本框。文本框的文本属性绑定到密码框的密码属性。它不是很干净,但它适用于我!谢谢! – David 2012-04-24 14:28:47

1

我相信你能做到这一点的唯一方法就是根据文本框创建你自己的控件。然后将实际的文本属性绑定到返回密码字符而不是实际密码的属性。然后你可以把密码作为一个依赖项属性(虽然我听说这是相当不安全的,这就是为什么它不是密码框中的依赖项属性),或者只是一个常规属性,并通过传递整个文本框对象。

2

我通过为密码内容创建两个属性并将它们绑定到相同的Model值来解决了此特定问题。其中一个(可见的UI元素)绑定到密码。获取这个属性当然然后返回一个字符数组来显示。必须使用密码文本的函数可以使用PlainPassword属性。

将“UpdateSourceTrigger = PropertyChanged”添加到文本框的“绑定”会导致字符在输入时出现在文本框中。

public string Password 
    { 
    set 
    { 
     Model.Password = value; 
     OnPropertyChanged("Password"); 
    } 
    get 
    { 
     return new String('●', Model.Password.Length); 
    } 
    } 

    public string PlainPassword 
    { 
    set 
    { 
     Model.Password = value; 
     OnPropertyChanged("Password"); 
    } 
    get { return Model.Password; } 
    } 
-1

helló!

即时新在这里,但也许我可以帮助你。我觉得这 - >可以是工作丝毫WPF和passwordbox

private void delete_Click(object sender, RoutedEventArgs e) 
    { 
    if (pass_passbox.IsFocused == true) 
     { 
      pass_passbox.Password= ""; 
     } 
    } 

如果OFCü做到这一点pass_passbox.Text它的文本框,但是当变化WPF passwordbox u需要编写可以pass_passbox.Password和U可以做到从屏幕键盘的变化。

没有完全测试,但美国可以重新这样

和u可以不选择这样的:

string Query = "Select * from [employeeinfo] where username='" + this.txt_user_name.Text + "' and password='" + this.pass_passbox.Password + "' "; 

可以看出U this.pass_passbox.Password是在文本框中输入相同的this.pass_passbox.Text