WPF虚拟键盘如何不获得当前焦点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF虚拟键盘如何不获得当前焦点相关的知识,希望对你有一定的参考价值。
用wpf写了个模拟键盘控件,为了处理特殊字符,我在键盘上加了一个按钮,
让它点击后会弹出特殊字符的窗口, 但是这样原来的比如在输入框里的焦点就失去了,自动跑到新窗口里去了,有什么方法让弹出窗口时原来的焦点还不变呢?
由于键盘只是一个控件,所以他会在别的地方被用, 所以我无法将失去的焦点设回去。只能想办法让新的窗口弹出时不拿走原有的focus
如果是, 将 键盘控件按钮的 Focusable 属性置为 False,
当点击 Button 时, Input 的焦点并不切换, 并不需要写切换回的代码.
如果在 Button Click 时想得到当前 处于输入(inputable) 状态的控件(例如 TextBox), 可以在 Click 事件中:
IInputElement iie=System.Windows.Input.FocusedElement;
if(iie is TextBox) MessageBox.Show((iie as TextBox).Text);
如果 处于输入状态的控件(如 TextBox) 和你的键盘控件不在同一窗口, 可以在 处于输入状态的控件失去焦点时记下此控件, 以便你在处理按钮事件时用.
另一个方法是, 你自定义的控件 可以增加一个 DependencyProperty 来绑定当前处于输入状的控件. 因为你总需要一个事件来激活虚拟键盘, 在这个事件中设置此属性. 参考技术A 另一个方法是, 你自定义的控件 可以增加一个 DependencyProperty 来绑定当前处于输入状的控件. 因为你总需要一个事件来激活虚拟键盘, 在这个事件中设置此属性. 参考技术B 可以从模式对话框还是非模式对话框这个角度考虑考虑
如何将键盘导航焦点传递给 WPF 中生成的 xaml?以及如何退货?
【中文标题】如何将键盘导航焦点传递给 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虚拟键盘如何不获得当前焦点的主要内容,如果未能解决你的问题,请参考以下文章