日期:2014-05-17 浏览次数:20922 次
SDK中提供的PasswordBox很好用,但是不能实现显示密码的功能。
个人通过组合PhoneTextBox和PasswordBox来定制了一个用户控件,作为密码的输入框,并可以根据选择来实现隐藏或者显示密码。
xaml代码:
<UserControl x:Class="CustomControls.PasswordTextBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:tk="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}">
<UserControl.Resources>
<Style x:Name="MyCustomTextBoxStyle" TargetType="tk:PhoneTextBox">
<Setter Property="Width" Value="375"/>
<Setter Property="Margin" Value="0"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Padding" Value="-5"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="FontSize" Value="24"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style x:Name="CustomPasswordBoxStyle" TargetType="PasswordBox">
<Setter Property="FontSize" Value="22"/>
<Setter Property="Background" Value="White"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Margin" Value="5 0 0 0"/>
</Style>
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
<tk:PhoneTextBox x:Name="ShowPwdTB"
Hint="请输入数字或字母"
Style="{StaticResource MyCustomTextBoxStyle}"
Visibility="Visible" TextChanged="OnShowPwdChanged"
GotFocus="OnShowPwdTBGotFocus"/>
<PasswordBox x:Name="HidePwdTB" Style="{StaticResource CustomPasswordBoxStyle}"
LostFocus="OnHidePwdTBLostFocus"
Padding="8 0 0 0" Visibility="Collapsed"/>
</Grid>
</UserControl>
public partial class PasswordTextBox : UserControl
{
#region Dependency Properties
public static readonly DependencyProperty IsShowPasswordProperty =
DependencyProperty.Register("IsShowPassword", typeof(bool), typeof(PasswordTextBox),
new PropertyMetadata(OnIsShowPasswordPropertyChanged));
public static readonly DependencyProperty PasswordProperty =
DependencyProperty.Register("Password", typeof(string), typeof(PasswordTextBox),
new PropertyMetadata(OnPasswordPropertyChanged));
#endregion
#region Data Members
// 当密码为空时,保留ShowPwdTB的可见性(用于显示Hint文本);此时设置隐藏密码的操作无效
private bool m_IsNeedHidePassword;
#endregion
#region Constructor
public PasswordTextBox()
{
InitializeComponent();
m_IsNeedHidePassword = false;
}
#endregio