我正在使用其他一些控件的UserControl。我想设置键盘快捷键(如 Ctrl + Tab )将焦点更改为窗口上的下一个控件,忽略UserControl中的所有其他控件。
我正在尝试访问父属性,如下所示:
FrameworkElement element = (FrameworkElement)this.Parent;
然后从它做一个TraversalRequest,或类似的东西。我不知道该怎么做。
那么,从UserControl内部将焦点移动到屏幕上的下一个控件的正确方法是什么?
答案 0 :(得分:1)
有几种方法可以做到这一点。您可以在链接页面的KeyDown
或PreviewKeyDown
事件处理程序中使用TraversalRequest
class:
// Creating a FocusNavigationDirection object and setting it to a
// local field that contains the direction selected.
FocusNavigationDirection focusDirection = _focusMoveValue;
// MoveFocus takes a TraveralReqest as its argument.
TraversalRequest request = new TraversalRequest(focusDirection);
// Gets the element with keyboard focus.
UIElement elementWithFocus = Keyboard.FocusedElement as UIElement;
// Change keyboard focus.
if (elementWithFocus != null)
{
elementWithFocus.MoveFocus(request);
}
或者,您可以在处理程序中使用UIElement.Focus
method:
particularControl.Focus();
甚至更简单......如果您只是在不希望用户能够关注的每个控件上设置Control.IsTabStop
property,则不需要任何事件处理程序False
:
<TextBox Name="NotTabStop" IsTabStop="False" ... />
然后,用户将能够使用Tab
键移动到下一个控件,因为他们将习惯这样做。