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 按下树视图。只是另一个与此无关的问题阻止了我看到这一点。

当我尝试从OnItemSelected处理程序模拟 F2 单击时,它不起作用,但处理程序的相同操作LayoutUpdated可以正常工作。

因此树视图需要完全更新以准备好接受按键。

于 2012-05-15T06:21:47.740 回答