0

私は次のことを試みています:

// Key to send   
 var key = Key.F2;       
// Event to send                         
var routedEvent = Keyboard.KeyDownEvent; 
TreeControl.RaiseEvent(
               new KeyEventArgs(
                Keyboard.PrimaryDevice,
                PresentationSource.FromVisual(TreeControl),
                0,
                key) { RoutedEvent = routedEvent }
            );

しかし、この方法で F2 をプログラムでシミュレートすることはできませんTreeControlが、キーボード フォーカスがあり、手動で F2 を押すとすぐに正常に動作します。助けてください。

OnItemSelectedハンドラーが呼び出された瞬間にこのコードを呼び出そうとしています(常に必要な場合ではありません)。

4

2 に答える 2

0

これが私のコードです:

// First: PreviewKeyDown
KeyEventArgs previewArgs = 
   new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 
        0, Key.Down);
previewArgs.RoutedEvent = Keyboard.PreviewKeyDownEvent;
focusedTextBox.RaiseEvent(previewArgs);

// Second: KeyDown
IInputElement newFocusedElement = Keyboard.FocusedElement;
KeyEventArgs args = 
   new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 
        0, Key.Down);
args.RoutedEvent = Keyboard.KeyDownEvent;
newFocusedElement.RaiseEvent(args);

とにかく、あなたと私のの間に多くの違いはありません...

于 2012-05-14T16:36:22.680 に答える
0

最初に投稿されたコードは正しく、ツリービューで F2 キーを押すと正しくシミュレートされることがわかりました。これに関係のない別の問題が原因で、これを見ることができませんでした。

ハンドラーからの F2 クリックをシミュレートしようとしたときOnItemSelectedは機能しませんでしたが、LayoutUpdatedハンドラーからの同じものは正常に機能します。

そのため、ツリービューを完全に更新して、キーの押下を受け入れる準備を整える必要があります。

于 2012-05-15T06:21:47.740 に答える