弹出窗口时如何保持文本框的焦点

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

如何防止主窗口失去焦点?

C# WinForm 文本框离开焦点事件 问题???

Jquery Mobile - 单击弹出窗口(标题和内容的任何区域)自动聚焦文本字段

如何使用 jQuery 生成一个简单的弹出窗口

c#,如何弹出一个显示在最前面但没有焦点的窗口?谢谢!