【问题标题】:Move focus to next control from UserControl将焦点从 UserControl 移到下一个控件
【发布时间】:2014-01-27 18:41:08
【问题描述】:

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

我正在尝试像这样访问父属性:

FrameworkElement element = (FrameworkElement)this.Parent;

然后从中发出 TraversalRequest 或类似的东西。我不知道该怎么办。

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

【问题讨论】:

    标签: c# wpf user-controls focus


    【解决方案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();
    

    或者甚至更简单...如果您只是在每个希望用户能够关注@987654331 的控件上设置Control.IsTabStop property,则不需要任何事件处理程序@:

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

    然后用户将能够使用Tab 键移动到下一个控件,就像他们习惯做的那样。

    【讨论】:

    • 谢谢,谢里登。我最终使所有控件 Focusable = false 和 this.Focusable = true。在这种特定情况下,它可以工作。
    猜你喜欢
    • 2014-06-30
    • 2017-05-08
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多