思路:不需要像其他方案改任何PasswordBox的样式,直接在同样的位置加个texbox控件显示隐藏即可
1.xaml,注意关键代码,样式之类可以不管
<!-- 密码 -->
<Border Grid.Row="7" Style="{StaticResource InputBorderStyle}">
<Canvas>
<Image Canvas.Top="9"
Canvas.Left="19"
Width="12"
Height="15"
Source="../images/icon_login_password.png" />
<PasswordBox Canvas.Top="0"
Canvas.Left="45"
Style="{StaticResource InputPasswordStyle}"
x:Name="tboxPassword"
GotFocus="tboxPassword_GotFocus"
LostFocus="tboxPassword_LostFocus" />
<!-- 请输入密码提示 -->
<TextBox Canvas.Top="0"
Canvas.Left="45"
Visibility="Hidden"
x:Name="tboxPasswordPlaceHolder"
Text="请输入密码"
Style="{StaticResource InputAccountStyle}"
GotFocus="tboxPasswordPlaceHolder_GotFocus"
/>
</Canvas>
</Border>
2.xaml.cs
private void tboxPassword_GotFocus(object sender, RoutedEventArgs e)
{
var password = sender as PasswordBox;
if (password != null)
{
var border = VisualTreeHelpers.FindAncestor<Border>(this.tboxPassword);
if (border != null)
{
border.BorderBrush = BrushGotFocus;
}
}
}
private void tboxPassword_LostFocus(object sender, RoutedEventArgs e)
{
var password = sender as PasswordBox;
if (password != null)
{
var border = VisualTreeHelpers.FindAncestor<Border>(this.tboxPassword);
if (border != null)
{
border.BorderBrush = BrushLostFocus;
}
if (string.IsNullOrWhiteSpace(password.Password))
{
password.Visibility = Visibility.Hidden ;
tboxPasswordPlaceHolder.Visibility = Visibility.Visible;
}
}
}
private void tboxPasswordPlaceHolder_GotFocus(object sender, RoutedEventArgs e)
{
tboxPassword.Visibility = Visibility.Visible;
tboxPasswordPlaceHolder.Visibility = Visibility.Hidden;
tboxPassword.Focus();
}