从Textbox阻止事件启动表单?

时间:2016-08-17 15:05:24

标签: c# wpf

我在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;
}

现在可能导致第一次点击丢失的原因。

希望有人能指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

这是因为如果TextBox没有聚焦,TextBox会处理MouseDown以使其自身聚焦。因此,有人第一次点击它时会集中注意力,而且您的活动也不会被调用。

最简单的修复订阅GotFocus。

修改

另一种简单的方法是订阅这样的处理事件:

this.MyTextBox.AddHandler( UIElement.PreviewMouseDownEvent, MyTextBox_PreviewMouseDown, true );