我有一个包含TextBox的UserControl。当我的主窗口加载时,我想将焦点设置到这个文本框上,所以我将Focusable="True" GotFocus="UC_GotFocus"添加到UserControl的定义中,并将FocusManager.FocusedElement="{Binding ElementName=login}"添加到我的主窗口定义中。在UC_GotFocus方法中,我只是在想要关注的控件上调用.Focus(),但这不起作用。
我所需要做的就是在应用程序启动时在UserControl中创建一个接收焦点的TextBox。
任何帮助都会很感谢,谢谢。
发布于 2009-05-07 22:48:00
我最近修复了一个登录闪屏的问题,当主窗口第一次加载时,它通过故事板显示。
我相信有两把钥匙可以解决这个问题。一种是将包含的元素设置为焦点范围。另一个是处理由正在加载的窗口触发的故事板的Storyboard Completed事件。
这个故事板使用户名和密码画布可见,然后逐渐变得100%不透明。关键是username控件在情节提要运行之前是不可见的,因此该控件在可见之前无法获得键盘焦点。让我困惑了一段时间的是它有“焦点”(即焦点是真的,但事实证明这只是逻辑焦点),直到阅读Kent Boogaart的答案并查看微软的WPF link text,我才知道它同时具有逻辑焦点和键盘焦点的概念
一旦我这样做了,我的特定问题的解决方案就很简单了:
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 ),因此您不需要显式调用它。请参阅此关于difference between Keyboard.Focus(item) and item.Focus.的问题
发布于 2009-12-03 06:12:44
这很愚蠢,但很管用:
弹出一个等待片刻的线程,然后返回并设置您想要的焦点。它甚至可以在图元主体的上下文中工作。
private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
System.Threading.ThreadPool.QueueUserWorkItem(
(a) =>
{
System.Threading.Thread.Sleep(100);
someUiElementThatWantsFocus.Dispatcher.Invoke(
new Action(() =>
{
someUiElementThatWantsFocus.Focus();
}));
}
);
}发布于 2009-03-23 15:48:08
就在最近,我有一个列表框,里面有一些TextBlocks。我希望能够双击文本块并将其转换为TextBox,然后专注于它并选择所有文本,这样用户就可以开始键入新名称(Akin to Adobe Layers)
不管怎么说,我在做这件事的时候,它就是不起作用。对我来说,这里的神奇之处在于确保我将事件设置为已处理。我认为它是在设置焦点,但一旦事件沿着这条道路走下去,它就切换了逻辑焦点。
这个故事的寓意是,确保将事件标记为已处理,这可能是您的问题。
https://stackoverflow.com/questions/673536
复制相似问题