从文本框启动表单块事件

本文关键字:事件 表单 启动 文本 | 更新日期: 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 );