[英]Setting focus on Passwordbox
所以我有一个带有登录窗口的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"/>
文本框中的绑定只是一个属性,它获取输入的值。
按钮中的绑定也只是一个属性,该属性检查用户名和密码,然后打开另一个窗口(所以我不认为这很必要显示)。
在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()(我已逐步完成),但密码框却无法获得焦点。 然后我想,可能是因为“尝试-抓住”,所以我试图将“焦点”设置在此范围之外,但同样会出现问题。 Passwortbox不会变得专注。
我已经在Google上搜索了确切的问题,但找不到任何内容(只有关于如何将焦点设置在密码箱上的常见问题)
我也在这里检查了stackoverflow,但是我发现的唯一发现是: 在应用程序启动时将焦点放在PasswordBox上,这显然不是我的问题,我已经在Window_Loaded中拥有了Focus。
预期的结果是,密码框正在获得Focus,但是某种程度上却不会。 我什至没有收到任何错误消息,因此我无法提供任何错误消息。
如果您需要更多信息,请直接打给我,然后我将编辑问题。 我希望任何人都知道这个问题,并可以在这里为我提供帮助。 谢谢!
我想您的问题可能被您的空白所掩盖。
IE浏览器您有一个错误,但捕获只是“吃”它,所以您永远不会看到它。
您可以单步执行,却没有注意到它跳到了陷阱,这似乎很奇怪。
当然,逐步执行将使您的工作变得混乱。
这是工作标记和代码:
<StackPanel>
<TextBox
Name="Tbx" Height="45"/>
<PasswordBox
Name="PW" Height="45"/>
<CheckBox
Name="CB" Content="Remember me"/>
<Button
Name="Btn" Height="40" Width="100" IsDefault="True"/>
</StackPanel>
private void Window_Loaded(object sender, RoutedEventArgs e)
{
string InputCut = "Blaa";
Tbx.Text = InputCut;
CB.IsChecked = true;
PW.Focus();
}
创建一个新的解决方案。
现在还没有。
因为任何错误都可能位于代码中的某个地方,所以您没有向我们展示。
将上面的标记和代码粘贴到主窗口中。
确保您挂接了已加载的事件。
观看它的工作。
我的建议是:
删除尝试捕获,不要再使用空的捕获块。
修复您的代码,从隔离存储中读取该字符串,使其更健壮。
对于WPF,它通常更常用
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
用户的appdata漫游根目录。
如果您的代码仍然无法正常工作或出错,则将您的应用程序片段添加到您创建的新解决方案中,直到您重现该问题为止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.