如何将键盘导航焦点传递给 WPF 中生成的 xaml?以及如何退货?

Posted

技术标签:

【中文标题】如何将键盘导航焦点传递给 WPF 中生成的 xaml?以及如何退货?【英文标题】:How to pass keyboard navigation focus to generated xaml in WPF? And how to return it back? 【发布时间】:2021-07-26 18:42:04 【问题描述】:

我有内容控制,在这里我正在生成视图,现在我想在这里传递 kayboard 导航焦点。当我点击“返回”时,我想回到以前的键盘导航焦点。

【问题讨论】:

【参考方案1】:

必须先用FocusManager找到现在成为焦点的控件,然后用父元素的所有子元素的VisualTreeHelper进行导航,当当前项tabindex减1且控件tabindex等于重点。

请注意以下示例以阐明解释。

private void Back_Click(object sender, RoutedEventArgs e)

   Control focusedControl = (Control)FocusManager.GetFocusedElement(this);

   DependencyObject child;
   for (int i = 0; i < VisualTreeHelper.GetChildrenCount(focusedControl.Parent); i++)
    
        child = VisualTreeHelper.GetChild(focusedControl.Parent, i);
        if (child is Control)
        
            if (((Control)child).TabIndex == focusedControl.TabIndex - 1)
               ((Control)child).Focus();
        
    

【讨论】:

以上是关于如何将键盘导航焦点传递给 WPF 中生成的 xaml?以及如何退货?的主要内容,如果未能解决你的问题,请参考以下文章

Android:将片段和弹出窗口的点击事件中生成的变量传递给活动的方法

WPF treeview:如何在资源管理器中实现键盘导航?

WPF虚拟键盘如何不获得当前焦点

在 WPF 中加载的控件上显示焦点元素

如何在键盘可访问性焦点上关闭汉堡菜单

如何在键盘可访问性焦点上关闭汉堡菜单