在WPF应用程序中,我想实现身份验证逻辑:只有当用户登录时,他才能在对话框中编辑某个文本框。
我想要的是以下行为:
1.如果用户已经登录,他可以像往常一样单击文本框并开始编辑其内容。
1.如果用户没有登录,他应该仍然可以点击文本框,但是他应该在登录对话框中得到提示。在完成登录对话框之后,他应该发现自己回到了文本框中,现在处于编辑模式。
1.如果用户取消登录对话框(没有登录),输入焦点应该移动到包含文本框的对话框的取消按钮,从而防止他编辑文本框的内容。
我试着用这种方式连接到PreviewGotKeyboardFocus事件:
private void TextBox_PreviewGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
bool loggedIn = ExecuteLogin(); //shows the login dialog and returns new login status
if (!loggedIn)
{
CancelButton.Focus();
e.Handled = true;
}
}
字符串
只要用户完成登录过程,它确实可以正常工作,但是如果用户取消登录对话框,它不会将输入焦点转移到取消按钮。(对话框中的每个文本框一次),而且整个系统看起来一团糟(应用程序的进程在应用程序关闭时不会终止-它必须在之后被杀死)。
我应该改变什么来获得我想要的行为?
2条答案
按热度按时间bxjv4tth1#
下面的示例代码对我来说工作正常。点击中间的文本框,在对话框中回答“否”,然后按[回车]。
个字符
请注意,虚线焦点边框仅在您使用键盘导航到Button时才有意显示:
WPF Button to have Keyboard focus (dotted border around) during the startup or activation of window
mnemlml82#
我认为你应该使用
GotFocus
事件。与其总是打开对话框并试图用代码关闭它,难道你不能立即获得日志信息,检查用户是否登录,然后打开或不打开对话框吗?