我有以下视觉树:
<DockPanel>
<TextBox Name="ElementWithFocus" DockPanel.Dock="Left" />
<ListBox DockPanel.Dock="Left" Width="200" KeyUp="handleListBoxKeyUp">
<ListBoxItem>1</ListBoxItem>
<ListBoxItem>4</ListBoxItem>
<ListBoxItem>3</ListBoxItem>
<ListBoxItem>2</ListBoxItem>
</ListBox>
<TextBox DockPanel.Dock="Left" />
</DockPanel>
handleListBoxKeyUp
如下:
private void handleListBoxKeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
((UIElement)sender).MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}
}
当。。。的时候ListBox
有键盘焦点(实际上是ListBoxItem
我猜),按Enter
将焦点移至列表中的第一项ListBox
而不是以下内容TextBox
。为什么会发生这种情况以及我怎样才能得到Enter
关键要表现得像Tab
here?
而不是打电话MoveFocus
在发送者上,您应该在事件参数中找到的原始源上调用它。
The sender
参数将始终是ListBox
本身,并调用MoveFocus
在那与FocusNavigationDirection.Next
将转到树中的下一个控件,即第一个ListBoxItem
.
将选择路由事件的原始源ListBoxItem
,之后的下一个控件是TextBox
您想要获得焦点。
((UIElement)e.OriginalSource).MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)