2012-02-27 23 views
3

WPFタッチアプリケーション用のオンスクリーンの数字パッドを開発しています。これはPopupに表示されます。ボタンを押すと、キーストロークがアプリケーションに送信され、ユーザーがTextBoxと入力したように見えるようになります。これはButton.Clickイベントハンドラ内で呼び出されWPFでのキーのシミュレーションのシミュレーション

// 'key' is set beforehand 
InputManager.Current.ProcessInput(new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, Environment.TickCount, key) { RoutedEvent = Control.KeyDownEvent }); 

:これは私のコードです。

これまでのところ、Key.Backのみが機能しました。いずれの数字キーも機能せず、どちらもKey.Decimalのいずれも機能しません。

編集:私はSendKeysを使用して問題を解決すると思ったが、同じことをするだけである。

なぜ数字ボタンが機能しないのですか?正しいKeyが渡されていることを確認しました。

+1

数字パッドのキーには、上の行と異なるキーが割り当てられている場合があります。これはテストされていないコメントです - 答えではありません。 – Paparazzi

+0

@BalamBalam:上の行も数字キーもコードでは機能しません。どちらも物理キーボードで動作します。 –

+0

これは何かを達成するラウンドアバウトのように聞こえます。サードパーティのヘルパークラスですべてのキー押下機能を実装して、ポップアップキーパッドまたはキーボードを入力することはできませんか? –

答えて

0

、私はあなたがこのようなアプローチを検討し提案します。完全な要件はわかりませんが、機能を分割してアプリケーションをモノリシックにすることは常に良いアプローチです! (擬似コード)を次のように三つの機能が実現されるであろう

Class depedendency diagram

UserControl1.InsertCharacter(string character) 
{ 
    textBox1.Text = textBox1.Text.Insert(textBox1.CaretIndex, character); 
    this.ValidateInput(); 
} 

UserControl1.ValidateInput() 
{ 
    // Perform validation 
} 

UserControl1.OnKeyDown() 
{ 
    // Perform validation 
    this.ValidateInput(); 
} 

UserControl2.AppendCharacter(string clickedCharacter) 
{ 
    this.userControl1.InsertCharacter(clickedCharacter); 
} 

さらにUserControl1をからUserControl2をを分離する

まずアップ、擬似UML図は、このあろう.NETイベントやEventAggregatorなどのイベントパターンを使用することができます。

+0

良い答えをありがとう。私はまだキーを押すだけのアプローチを探していますが、見つけられなければこれを受け入れます。 –

+2

確かに1つありますが、これはマウス/キー入力(主にオートメーションテストに使用される)をシミュレートできるので、私はUIAutomation Frameworkを調べます。しかし、私が作ろうとしていることは、可能であれば、これを避け、ビューのやりとりやコードビハインドの特定の機能、あるいはMVVMアプリケーションのViewModelの特定の機能にロジックを移動させることです –

0

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b657618e-7fc6-4e6b-9b62-1ffca25d186b/をご覧ください。 WPFテキストボックスには特定のキーを処理する際の問題があります。

記事から:コメント欄で私たちの議論に続いて

var eventArgs = new TextCompositionEventArgs(Keyboard.PrimaryDevice, 
new TextComposition(InputManager.Current, Keyboard.FocusedElement, key)); 
eventArgs.RoutedEvent = TextInputEvent; 

InputManager.Current.ProcessInput(eventArgs); 
+0

'TextComposition'コンストラクタは' Key'ではなく最後の引数の文字列を受け取ります。 –

関連する問題