从文本框启动表单块事件
本文关键字:事件 表单 启动 文本 | 更新日期: 2023-09-27 18:02:51
我在WPF中遇到了这个奇怪的问题。在触摸屏上运行的应用程序需要一个小键盘来输入数据。我正在从大型机上启动这个键盘。这是通过单击或点击表单上的文本框来完成的。点击键盘后启动,但结果是手指在触摸屏上的第一次点击被忽略,即点击事件没有触发。如果第一次点击是用鼠标完成的,则触发事件
代码如下:
private void TextBox_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
Point positie = new Point();
positie.Y = this.Top + this.Height;
positie.X = (this.Width / 20) * 2;
Mouse.Synchronize();
KeyboardWindow kb = new KeyboardWindow(positie, (TextBox)sender);
kb.ShowDialog();
kb = null;
}
如果我从主窗体上的一个按钮启动相同的键盘,那么它就会像预期的那样工作:如果用手指触摸或用鼠标点击,则触发键盘上的第一个点击事件。
代码:private void btnKb_Click(object sender, RoutedEventArgs e)
{
Point positie = new Point();
positie.Y = this.Top + this.Height;
positie.X = (this.Width / 20) * 2;
KeyboardWindow kb = new KeyboardWindow(positie, (TextBox)txtTest);
kb.ShowDialog();
kb = null;
}
现在是什么原因导致了第一次点击的缺失
希望有人能给我指路
这是因为如果TextBox没有聚焦,则TextBox会处理MouseDown来使自己聚焦。所以当用户第一次点击它的时候,它会被聚焦,而你的事件不会被调用。
最简单的修复订阅GotFocus。
编辑另一种简单的方法是订阅处理过的事件,如下所示:
this.MyTextBox.AddHandler( UIElement.PreviewMouseDownEvent, MyTextBox_PreviewMouseDown, true );