2016-08-17 4 views
0

私はWPFでこの興味深い問題に遭遇しました。 タッチスクリーンで実行するアプリケーションには、データ入力用のキーパッドが必要です。 メインフォームからこのキーパッドを起動しています。これは、メインフォーム上のテキストボックスをクリックまたはタップすることによって行われます。 タップした後、キーパッドが起動されますが、その結果、タッチスクリーン上の指で最初にクリックされたものが取り込まれます。つまり、クリックイベントは発生しません。私は、メインフォーム上のボタンから同じキーパッドを出せた場合Textboxブロックイベントからフォームを起動しますか?

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

これは、TextBoxがフォーカスしていない場合にMouseDownがフォーカスするように処理するためです。だから、誰かが最初にクリックすると集中し、イベントは呼び出されません。

最も簡単な修正はGotFocusにも加入しています。

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

あなたは私が推測フォーカスについて正しかった:

EDIT

は、もう1つの簡単な方法は、このように処理するイベントに加入することです。それにもかかわらず、あなたの発言は問題を解決することにつながりませんでした。私は私のXamlでスタイラスとマウスを使い終わった。スタイラスにはこのフォーカス動作がありませんでした – Harm

関連する問題