2014-09-17 4 views
0

저는 매우 간단한 WPF 응용 프로그램이 있습니다. 일련의 텍스트 및 콤보 상자 (모두 TabIndex 집합)가 있으며 모두 아래에 데이터 격자가 있습니다. 사용자는 맨 위에있는 모든 상자를 통해 탭을 만들 수 있습니다. 그런 다음 응용 프로그램이 탭이있는 행을 따라 이동하는 DataGrid로 이동합니다.프로그래밍 방식으로 WPF에서 뒤로 탭

키보드에서 Shift + Tab을 누르면 모든 곳에서 잘 작동합니다. 하지만 키보드를 사용하지 않고 앞뒤로 탭할 수있는 버튼을 추가하려고합니다 (터치 스크린 응용 프로그램이 될 것입니다). 하나 개의 버튼 내가 가진에서

... 포워드 그래서 당신은 반대 방식으로 작동 할 FocusNavigationDirection.Previous를 사용하여 생각 탭 이동을 완벽하게작동

private void ButtonRight_Click(object sender, System.Windows.RoutedEventArgs e) 
{ 
    (Keyboard.FocusedElement as UIElement).MoveFocus(new TraversalRequest(FocusNavigationDirection.Next)); 
} 

? 그러나 버튼을 눌렀을 때 포커스가 무엇이든 관계없이 데이터 그리드의 마지막 셀에 포커스를 설정합니다! 나는 여러 부모와 메인 윈도우 자체에 MoveFocus을 호출 해 보았습니다.하지만 그것들은 작동하지 않습니다. 내가 시도

또 다른 것은이었다 ...

System.Windows.Forms.SendKeys.SendWait("+{TAB}"); 

시도하고 수동으로 Shift + Tab 이벤트를 보낼 ... 전혀 아무것도에 포커스를 설정하는하기! (WPF에서 작동하지 않습니다 SendKeys.Send 것에주의 SendWait 사용해야합니다) 나는 또한 시도

을 ... 응용 프로그램의 상단에있는 첫 번째 텍스트 상자에 포커스를 설정

var shift = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.LeftShift) { RoutedEvent = Keyboard.KeyDownEvent }; 
var tab = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.Tab) { RoutedEvent = Keyboard.KeyDownEvent }; 
InputManager.Current.ProcessInput(shift); 
InputManager.Current.ProcessInput(tab); 

!

여기에서 어디로 가야할지 모르겠다. 이상적으로는 TraversalRequest(FocusNavigationDirection.Previous)이 작동하지만 그럴 수는 없습니다. 어쩌면 내 XAML이 배치 된 것과 관련이 있을지 모릅니다.

+1

MoveFocus에 대한 호출을 트리거하는 클릭하는 버튼에 Focusable을 false로 설정하여 키보드 포커스를 얻지 않고 그 버튼에서 탐색 만하고 있는지 확인하십시오. – AndrewS

+1

간단한 데모를 시도했지만 예상대로 작동합니다. 클릭 한 버튼이 집중 될 수 없어야합니다. –

+0

예, 클릭 된 버튼은 모두'Focusable'을'False'로,'IsTabStop'을'False'로합니다. 편집 : 죄송합니다! 뒤로 탭하는 버튼에는'Focusable'이 설정되지 않았습니다! 도와 주셔서 감사합니다. – TranquilMarmot

답변

0

밖으로 나옵니다 은 뒤로 탭 태브에서 False으로 설정되었습니다 (단, 앞으로 진행할 버튼으로 설정되었습니다). 내 실수.

관련 문제