我在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;
}
现在可能导致第一次点击丢失的原因。
希望有人能指出我正确的方向。
答案 0 :(得分:1)
这是因为如果TextBox没有聚焦,TextBox会处理MouseDown以使其自身聚焦。因此,有人第一次点击它时会集中注意力,而且您的活动也不会被调用。
最简单的修复订阅GotFocus。
修改
另一种简单的方法是订阅这样的处理事件:
this.MyTextBox.AddHandler( UIElement.PreviewMouseDownEvent, MyTextBox_PreviewMouseDown, true );