【发布时间】:2019-09-03 07:26:45
【问题描述】:
所以我有一个带有登录窗口的 C# WPF 应用程序。在这个窗口中,我还有一个复选框,用于在他下次启动此应用程序时保护用户名(就像“记住我”)。
这个窗口的正常焦点显然是用户名。但是如果用户选择了记住我复选框,密码框应该是焦点(因为用户名已经填写)。
所以我写了这段代码:
在 Xaml 中:
<PasswordBox
Name="PW"
Grid.Row="2"
Grid.Column="1"
Margin="10 0 10 0"
VerticalContentAlignment="Center"
Height="45"/>
<CheckBox
Name="CB"
Grid.Row="1"
Grid.Column="1"
VerticalAlignment="Bottom"
Margin="10"
Content="Remember me"/>
<TextBox
Name="Tbx"
Grid.Row="1"
Grid.Column="1"
Margin="10 0 10 0"
Text="{Binding Path=User}"
VerticalContentAlignment="Center"
Height="45"/>
<Button
Name="Btn"
Grid.Row="3"
Grid.Column="1"
Content="Login"
Height="40"
Width="100"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Command="{Binding Path=LoginUser}"
Click="Btn_Click"
IsDefault="True"/>
Textbox中的Binding只是一个Property,它获取输入的Value。
Button 中的 Binding 也只是一个 Property,它检查用户名和密码,然后打开另一个窗口(所以我不认为,那是必要的)。
在 xaml.cs 中
private void Btn_Click(object sender, RoutedEventArgs e)
{
if (Cb.IsChecked == true)
{
Properties.Settings.Default.Username = Tbx.Text;
}
}
因此,使用此 Button_Click 我可以保护输入的用户名,以便应用程序下次可以记住它。 这可以正常工作。
现在是有趣的部分,Window_Loaded 事件:
try
{
IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForAssembly();
StreamReader srReader = new StreamReader(new IsolatedStorageFileStream("isotest", FileMode.OpenOrCreate, isolatedStorage));
string Input = srReader.ReadLine().TrimStart();
string InputCut = Input.Substring(0, Input.Length - 25);
Tbx.Text = InputCut;
Cb.IsChecked = true;
Pb.Focus()
}
catch(Exception ex)
{}
因此,如果 CheckBox 被选中,他将通过 try 部分,并且正在使用 Pb.Focus() (我已经通过它),但不知何故密码框不会获得焦点。 然后我想,可能是因为 Try - Catch,所以我尝试将 Focus 设置在此之外,但出现了同样的问题。 Passwortbox 不会获得焦点。
我已经在谷歌上搜索过那个确切的问题,但我找不到任何东西(只有关于如何在密码框上设置焦点的普通问题)
我也在这里检查了 stackoverflow,但我发现的唯一内容是: Set focus on PasswordBox when application starts 这显然不是我的问题,我已经在 Window_Loaded 中获得了焦点。
预期的结果是,密码框获得焦点,但不知何故它不会。 我什至没有收到任何错误消息,所以我无法提供任何错误消息。
如果您需要更多信息,请联系我,然后我将编辑问题。 我希望你们中的任何人都知道这个问题,并且可以在这里帮助我。 谢谢!
【问题讨论】:
-
您是否调试过您的代码以查明对
Pb.Focus()的调用是否被实际执行?Keyboard.Focus(Pb);呢? -
是的,正如我所说。 Pb.Focus() 正在执行。我刚刚尝试了 Keyboard.Focus(pb),它也被执行了,但是 Passwordbox 仍然没有得到焦点。
-
Focus()是否返回 true? -
是的。我只是选择了“var a = Pb.Focus()”,当我通过时,a 是真的
-
请提供您的问题的MCVE。
标签: c# wpf focus passwordbox