今天寫小東西的時候要用到PasswordBox控件。在實例名后面點個了點之后,發現沒有Text這個屬性(有Password屬性)在網上搜索了一下,發現有三種使用PasswordBox的方法.
- 使用其Password屬性值(這個是最簡單的了)
- 使用Binding,把PasswordBox中的密碼值與后台數據對象的某個屬性關聯
- 使用PasswordBox的SecurePassword屬性
本文主要聊聊第三個方法。SecurePassword這個屬性是在.NET 3.5 SP1的時候加進來的屬性。
SecurePassword的數據類型是SecureString. 對於SecurePassword類型實例,往里寫值容易,往外讀值就難了,要不然怎么叫"加密字符串"呢. 特別提醒一點, 如果調用一個SecurePassword實例的ToString()方法,你得到的值永遠都是"System.Security.SecureString".
程序的運行界面如下,XAML代碼大家自己猜吧,那個反正里面有個PasswordBox的實例,名為passwordBoxPassword.
獲取passwordBoxPassword中密碼的代碼如下:
- // 使用一個IntPtr類型值來存儲加密字符串的起始點
- IntPtr p = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(this.passwordBoxPassword.SecurePassword);
- // 使用.NET內部算法把IntPtr指向處的字符集合轉換成字符串
- string password = System.Runtime.InteropServices.Marshal.PtrToStringBSTR(p);
- // 順便校驗一下
- if (string.IsNullOrEmpty(password) || password!="123456")
- {
- MessageBox.Show("請輸入密碼", "提示", MessageBoxButton.OK, MessageBoxImage.Asterisk);
- return;
- }