将焦点从UserControl移动到下一个控件

时间:2014-01-27 18:41:08

标签: c# wpf user-controls focus

我正在使用其他一些控件的UserControl。我想设置键盘快捷键(如 Ctrl + Tab )将焦点更改为窗口上的下一个控件,忽略UserControl中的所有其他控件。

我正在尝试访问父属性,如下所示:

FrameworkElement element = (FrameworkElement)this.Parent;

然后从它做一个TraversalRequest,或类似的东西。我不知道该怎么做。

那么,从UserControl内部将焦点移动到屏幕上的下一个控件的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。您可以在链接页面的KeyDownPreviewKeyDown事件处理程序中使用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键移动到下一个控件,因为他们将习惯这样做。