如何在wpf中模拟用键盘焦点在树视图上按F2按钮?

时间:2012-05-14 09:56:05

标签: c# wpf treeview focus

我正在尝试以下方法:

// 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处理程序时调用此代码(必要时并非总是如此)。

2 个答案:

答案 0 :(得分: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);

无论如何,你和我之间没有太多差异......

答案 1 :(得分:0)

最初发布的代码是正确的,我发现它模拟F2正确按树视图。只是另一个与此无关的问题使我无法看到这一点。

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

因此树视图需要完全更新,以便接受按键操作。