我最近为第一次加载主窗口时通过情节提要显示的登录启动画面解决了这个问题。
我相信修复有两个关键。一个是使包含元素成为焦点范围。另一个是处理由正在加载的窗口触发的情节提要的情节提要完成事件。
该故事板使用户名和密码画布可见,然后逐渐变为 100% 不透明。关键是用户名控件在情节提要运行之前不可见,因此该控件在可见之前无法获得键盘焦点。让我失望的是它有“焦点”(即焦点是真的,但事实证明这只是逻辑焦点),直到阅读 Kent Boogaart 之前,我才知道 WPF 有逻辑焦点和键盘焦点的概念回答并查看微软的 WPF链接文本
一旦我这样做了,我的特定问题的解决方案就很简单了:
1)使包含元素成为焦点范围
<Canvas FocusManager.IsFocusScope="True" Visibility="Collapsed">
<TextBox x:Name="m_uxUsername" AcceptsTab="False" AcceptsReturn="False">
</TextBox>
</Canvas>
2) 将已完成的事件处理程序附加到情节提要
<Storyboard x:Key="Splash Screen" Completed="UserNamePassword_Storyboard_Completed">
...
</Storyboard>
和
3) 将我的用户名 TextBox 设置为在情节提要完成事件处理程序中具有键盘焦点。
void UserNamePassword_Storyboard_Completed(object sender, EventArgs e)
{
m_uxUsername.Focus();
}
请注意,调用 item.Focus() 会导致调用 Keyboard.Focus(this),因此您无需显式调用 this。请参阅此问题,了解Keyboard.Focus(item) 和 item.Focus 之间的区别。