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

时间:2017-10-06 12:10:46

标签: c# wpf windows keyboard virtual-keyboard

我正在构建一个虚拟键盘,以满足我将要部署的触摸屏机器的需求。我正在使用键盘的弹出窗口,并且能够连接所有数字按钮,如下所示,这是我的虚拟键盘类

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。这意味着当这个弹出窗口出现时(当文本框或任何其他输入元素获得焦点时键盘弹出窗口出现),我无法获得对焦点文本框的引用,因此我无法写入它。请问如何确保聚焦文本框保持聚焦,以便我可以从弹出窗口分配其文本属性?或者,如果有更好的方法,请指出我正确的方向。感谢

2 个答案:

答案 0 :(得分:0)

我已经将这个键盘用于WPF:

keyboard control wpf

这是一个弹出控件,可以根据需要自定义。你有完整的代码,它是免费的。在我的情况下,我不得不调整弹出窗口(布局和添加德语字母),非常简单。

我还必须显示一个数字键盘,我使用相同的键盘,但布局更简单。在幕后,一切都非常简单:您必须在网格中定义一个键,将其放在您想要的位置,并确保在单击相应的虚拟键代码时生成。

答案 1 :(得分:0)

我使用弹出控件创建键盘,使用按钮创建所有键,并将单个事件处理程序连接到所有输入按钮,然后为退格键输入按钮的不同事件处理程序。单击任何字母,数字或符号按钮后,将调用以下函数。

try
        {
            IInputElement focusedControl = Keyboard.FocusedElement;
            var foc = focusedControl as TextBox;
            foc.Text += (((sender as Button).Content as Border).Child as TextBlock).Text;
        }
        catch (Exception)
        {

        }

将按钮的文本插入到焦点对照中。这是非常基本的。我会对如何扩展这一点表示赞赏。感谢