我正在为 wpf 应用程序制作登录屏幕。 我想要 2 个文本框,一个用于用户名和密码。
对于用户名,我使用了一个文本框并向其添加了文本("用户名"),当用户单击它以输入他们的用户名时,该文本会消失。 我用下面的代码完成了。
我似乎无法复制此密码。 我不相信我能够使用文本框,因为我无法伪装用户输入 * 或其他任何东西,而且我无法找到一种方法将"密码"硬编码到框中,以便在用户单击时消失。
我该怎么做? 我知道这是可能的,因为很多网站都有此功能,但是在谷歌搜索了很长时间后我无法弄清楚!
我应该强调,我对编程是全新的,所以针对完全新手的答案将不胜感激!
谢谢
xaml: GotFocus="UserNameTextbox_OnGotFocus" 前景="#FFA19DA1"/>
private void UserNameTextbox_OnGotFocus(object sender, RoutedEventArgs e)
{
UserNameTextbox.Text = "";
}
此处的用户名示例
试试这个技术:
XAML:
<Window x:Class="WpfApplication16.MainWindow"
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:local="clr-namespace:WpfApplication16"
mc:Ignorable="d"
Title="MainWindow" Height="100" Width="342.111" Background="DarkBlue">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="User Name:" HorizontalAlignment="Right" Foreground="White" />
<TextBox Name="txtUserName" Grid.Column="1" TextChanged="txtUserName_TextChanged" />
<TextBlock Name="tbUsername" Text="User Name" Foreground="Gray" IsHitTestVisible="False" Margin="4,0" VerticalAlignment="Center" Grid.Column="1" />
<TextBlock Grid.Row="1" Text="Password:" Foreground="White" HorizontalAlignment="Right" />
<PasswordBox Name="pwbPassword" Grid.Row="1" Grid.Column="1" PasswordChanged="pwbPassword_PasswordChanged" />
<TextBlock Name="tbPassword" Grid.Row="1" Grid.Column="1" Foreground="Gray" Margin="4,0" VerticalAlignment="Center" Text="Password" IsHitTestVisible="False" />
</Grid>
</Window>
代码隐藏:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void txtUserName_TextChanged(object sender, TextChangedEventArgs e)
{
if (txtUserName.Text.Length > 0)
tbUsername.Visibility = Visibility.Collapsed;
else
tbUsername.Visibility = Visibility.Visible;
}
private void pwbPassword_PasswordChanged(object sender, RoutedEventArgs e)
{
if (pwbPassword.Password.Length > 0)
tbPassword.Visibility = Visibility.Collapsed;
else
tbPassword.Visibility = Visibility.Visible;
}
}
看起来您需要稍微自定义一下密码框。实现它的一种方法是创建带有密码框和文本块的用户控件。在密码框的GotFocus上,您只需将文本块的可见性设置为折叠。并且不要伪造为文本块设置 HitTestVisible=false。