弹出窗口时如何保持文本框的焦点
Posted
技术标签:
【中文标题】弹出窗口时如何保持文本框的焦点【英文标题】:How to keep text box's focus when a window pops up 【发布时间】:2018-03-18 05:49:17 【问题描述】:我正在构建一个虚拟键盘,以满足我将要部署的触摸屏机器的需求。我正在使用键盘的弹出窗口,并且能够按如下方式连接所有数字按钮,这是我的虚拟键盘类
public partial class NumKeypad : Window
withoutB withoutbvn;
enterBvn ebvnn;
public NumKeypad()
InitializeComponent();
public NumKeypad(withoutB wobvn)
InitializeComponent();
withoutbvn = wobvn;
private void one_Click(object sender, RoutedEventArgs e)
var focusedElt = FocusManager.GetFocusedElement(withoutbvn);
var tbox = focusedElt as TextBox;
try
withoutbvn.ph.Text += (((sender as Button).Content as Border).Child as TextBlock).Text;//this works, but this is assigning directly to only one control. i want to assign to whatever control that has focus
catch (Exception ex)
在 one_click 函数(处理所有输入按钮单击)的第一行上,我试图获取对当前在页面中聚焦的元素的引用,其实例为“withoutbvn”。 在第二行,我正在尝试将元素转换为文本框,以便我可以写入其文本属性。但这一直返回null。意思是当这个弹出窗口出现时(当文本框或任何其他输入元素获得焦点时,键盘弹出窗口出现),我无法获得对焦点文本框的引用,因此我无法写入它。请问我如何确保焦点文本框保持焦点,以便我可以从弹出窗口分配其文本属性?或者,如果有更好的方法可以做到这一点,请指出我正确的方向。谢谢
【问题讨论】:
不能自己创建吗? 看到这个:codeproject.com/Articles/145579/… @MarcoSalerno 我现在正在尝试这样做,但我有一个问题。当在键盘上单击按钮(这是一个弹出窗口)时,如何使用按钮传递的值在父窗口中设置文本框的文本 您可以将键盘作为对话框打开,然后当您单击“Enter”时,您可以使用存储在键盘中的字符串。我过去所做的是在键盘顶部有一个 TextBox,其中包含来自关键条目的所有文本。我们设置系统,以便在“编辑模式”下弹出任何文本框。 (这是不久前的事了,不记得所有细节了)。 【参考方案1】:我在 WPF 中使用过这个键盘:
keyboard control wpf
这是一个弹出控件,可以根据需要进行自定义。您拥有完整的代码,而且它是免费的。在我的情况下,我必须调整弹出窗口(布局并添加德语字母)并且非常简单。
我还必须展示一个数字键盘,我使用了相同的键盘,但布局更简单。在幕后,一切都非常简单:您必须在网格中定义一个键,将其放置在您想要的位置,并确保您在单击时生成相应的虚拟键代码。
【讨论】:
【参考方案2】:我使用弹出控件创建键盘,使用按钮创建所有键并将单个事件处理程序连接到所有输入按钮,然后为退格和输入按钮连接不同的事件处理程序。一旦单击任何字母、数字或符号按钮,就会调用以下函数。
try
IInputElement focusedControl = Keyboard.FocusedElement;
var foc = focusedControl as TextBox;
foc.Text += (((sender as Button).Content as Border).Child as TextBlock).Text;
catch (Exception)
将按钮的文本插入到焦点控件中。这是非常基本的。我将不胜感激有关如何扩展此功能的更多建议。谢谢
【讨论】:
以上是关于弹出窗口时如何保持文本框的焦点的主要内容,如果未能解决你的问题,请参考以下文章
AppKit 上的 SwiftUI - 在弹出窗口中将焦点设置为 TextField