我正在构建一个虚拟键盘,以满足我将要部署的触摸屏机器的需求。我正在使用键盘的弹出窗口,并且能够连接所有数字按钮,如下所示,这是我的虚拟键盘类
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。这意味着当这个弹出窗口出现时(当文本框或任何其他输入元素获得焦点时键盘弹出窗口出现),我无法获得对焦点文本框的引用,因此我无法写入它。请问如何确保聚焦文本框保持聚焦,以便我可以从弹出窗口分配其文本属性?或者,如果有更好的方法,请指出我正确的方向。感谢
答案 0 :(得分:0)
我已经将这个键盘用于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)
{
}
将按钮的文本插入到焦点对照中。这是非常基本的。我会对如何扩展这一点表示赞赏。感谢