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

C# 将焦点从UserControl移动到下一个控件,c#,wpf,user-controls,focus,C#,Wpf,User Controls,Focus,我正在处理一个UserControl,里面还有一些其他控件。我想设置一个键盘快捷键(如Ctrl+Tab),将焦点更改为窗口上的下一个控件,忽略UserControl中的所有其他控件 我正在尝试如下方式访问父属性: FrameworkElement element = (FrameworkElement)this.Parent; 然后从它发出一个遍历请求,或者类似的东西。我不知道该怎么办 那么,从用户控件内部将焦点移动到屏幕上的下一个控件的正确方法是什么呢?有几种方法可以做到这一点。您可以在Ke

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

我正在尝试如下方式访问父属性:

FrameworkElement element = (FrameworkElement)this.Parent;
然后从它发出一个遍历请求,或者类似的东西。我不知道该怎么办


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

有几种方法可以做到这一点。您可以在
KeyDown
PreviewKeyDown
事件处理程序中使用。。。从链接页面:

// 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);
}
或者,您可以只在处理程序中使用:

particularControl.Focus();
甚至更简单。。。如果您只需将每个控件上不希望用户能够将焦点设置为
False
,则不需要任何事件处理程序:

<TextBox Name="NotTabStop" IsTabStop="False" ... />


然后用户可以使用
选项卡
键移动到下一个控件,就像他们习惯的那样。

谢谢,Sheridan。我最终使所有控件都可聚焦=false,而这个.Focusable=true。在这种特定情况下,它是有效的。