2012-05-14 91 views
0

我嘗試以下操作:如何在wpf中模擬按鍵集中在treeview上按下F2按鈕?

// 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處理程序被調用(在必要時並不總是)。

+0

我最近有一個類似的問題,「解決」它與發射'PreviewKeyDownEvent'以及。你有沒有試圖解僱這兩件事?這可能是值得一試的 – Damascus

+0

試圖發送Keyboard.PreviewKeyDownEvent然後Keyboard.KeyDownEvent但這不適用於我。如果您有一些工作代碼,請發佈。 – demonplus

+0

讓我發佈我的代碼作爲答案,只是爲了讓您可以比較 – Damascus

回答

0

最初發布的代碼是正確的,我想通了,它正確地模擬按下F2爲treeview。另一個與此無關的問題阻止了我看到這一點。

當我試圖模擬F2點擊OnItemSelected處理程序它不起作用,但從LayoutUpdated處理程序工作正常。

因此,樹視圖需要全面更新以準備好接受按鍵。

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); 

有沒有很多你和我反正之間的差異...

+0

感謝您的代碼,我認爲這是對的,我想我自己也是對的。只是還有另一個問題阻止我看到這一點。 – demonplus

+0

所以這個問題與這個按鍵模擬沒有關係? – Damascus

+0

是的。再次感謝你的幫助。 – demonplus