水印密码框完整解析

<一>网上的解决方案:

问:我需要使用PhoneTextBox控件的Hint属性,但是我希望能像密码框一样用特殊字符隐藏明文,就是用PhoneTextBox作密码框,请问怎么实现啊?

答:建议在PasswordBox上面添加一个TextBlock控件其中有你要显示的提示文字。然后在MouseLeftButtonDown事件中隐藏这个TextBlock。

eg:(注意中间这个大的●,我是用QQ拼音提供的特殊字符弄出来的,换做★照样可以,总比系统提供的小·看着好看一点~

<PasswordBox x:Name="pwbox" PasswordChar="●" Margin="10,116,78,475" MouseLeftButtonDown="PasswordBox_MouseLeftButtonDown" LostFocus="pwbox_LostFocus"/>
<TextBlock x:Name="pwdtb" Text="密码" Padding="10" Margin="23,129,356,488" Foreground="#828282" FontSize="25" Tap="pwdtb_Tap"></TextBlock>

<二>我的补充:

//网上的解决方法,隐藏textblock
private void PasswordBox_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
pwdtb.Visibility = Visibility.Collapsed;
}
//不小心点到textblock的时候,关键的一句就是passwordbox获取焦点,如果点到了passwordbox本身,当然会自动获取焦点。
private void pwdtb_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
pwdtb.Visibility = Visibility.Collapsed;
pwbox.Focus();
}
//passwordbox失去焦点的时候,做个判断,要不要显示textblock的文字
private void pwbox_LostFocus(object sender, RoutedEventArgs e)
{
if (pwbox.Password == "")
{
pwdtb.Visibility = Visibility.Visible;
}
}

总结:解决的关键是,

①textblock的隐藏。

②操作passwordbox获取焦点,失去焦点这2个事件。

新增解决方法之二://textblock在上面,关键点是,当点击textblock的时候(pwdtb_Tap_1)把焦点传给passwordbox;这样控制起来比第一种要方便一点

<PasswordBox x:Name="pwbox" Background="#d8dcdf" BorderThickness="0" PasswordChar="●" GotFocus="pwbox_GotFocus" LostFocus="pwbox_LostFocus_1" KeyUp="ptb_KeyUp"/>

<TextBlock x:Name="pwdtb" Text="密码" Padding="20,20" Foreground="#000" FontSize="25" Tap="pwdtb_Tap_1"/>

c#:

private void pwdtb_Tap_1(object sender, System.Windows.Input.GestureEventArgs e)
{
pwdtb.Visibility = Visibility.Collapsed;
pwbox.Focus();
}

private void pwbox_GotFocus(object sender, RoutedEventArgs e)
{
pwbox.Background = new SolidColorBrush(Color.FromArgb(255, 216, 220, 223));
}
private void pwbox_LostFocus_1(object sender, RoutedEventArgs e)
{
if (pwbox.Password == "")
{
pwdtb.Visibility = Visibility.Visible;

}
}
private void ptb_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.Enter)
this.Focus();
}

 

posted on 2013-12-24 16:29  鸣动我心  阅读(443)  评论(0编辑  收藏  举报