2011-01-27 1 views
1

WPF에 KeyDown 이벤트 처리기가 연결된 Window가 있습니다.예를 들어 이미 처리 된 KeyDown 라우팅 이벤트를 처리하지 않는 방법. TextBox

사용자가 숫자 키 (0-9)를 누르면 이벤트에 응답합니다. 단축키로 0-9를 사용하여 라디오 버튼을 선택합니다. 예 : 키 3을 누르면 3 번째 라디오 버튼이 선택됩니다.

문제는 사용자가 TextBox에서 숫자 키를 누르면 TextBox의 기본 구현을 유지하기 때문에 키 누르기를 바로 가기로 처리하고 싶지 않다는 것입니다.

지금 TextBox 내부에서 사용자가 3을 누르면 텍스트 상자의 텍스트가 3으로 설정되고 3 번째 라디오 단추가 선택됩니다.

사용자가 TextBox 내부에서 키를 눌렀을 때 TextBox가 e.Handled를 true로 설정한다고 생각했지만 그렇지 않습니다.

또한 TextBox는 그 예입니다. 사용자가 계층 구조의 다른 입력 컨트롤에 무언가를 입력하면 KeyDown 이벤트에 응답하고 싶지 않습니다.

나는이 문제를 해결하기 위해 라우트 된 이벤트를 더 잘 이해할 필요가 있거나 다른 방법으로이를 해결할 것이라고 생각하십니까?

+0

사용자에게 두통을주기위한 소리입니다. 응용 프로그램은 사용자에게 친숙해야합니다. 이는 기본 코드가 작동하는 것만 큼 중요합니다. 나는 사용자 혼란을 두려워한다. 숫자 대신 F 버튼을 매핑하는 것이 더 좋을까요? (나는 당신이 당신의 이유를 가지고 있을지도 모른다는 것을 알고 있습니다.) –

+0

나 자신에게 더 동의하지 못했습니다. 그러나 사용자는 소프트웨어의 이전 부분에서 이러한 단축키에 익숙하므로 필요합니다. –

답변

0

RoutedEventArgs (귀하의 경우 KeyPressEventArgs) 속성을 확인할 수 있습니다. TextBox 인 경우 처리하지 마십시오. 그렇지 않은 경우 RadioButton 선택 로직을 수행하십시오.

+0

그건 내 첫 번째 생각 이었지만 더 좋은 방법이 있어야합니다 ... 아니요? 그럴 경우 처리하지 않으려는 모든 가능한 컨트롤에 대해 생각해야 할 것입니다. 오류가 발생하기 쉽습니다. –

0

양식을 사용해보십시오. 속성을 사용하고 로직을 트리거하려면 ActiveControl 속성을 사용하십시오.

+0

그럼 위와 같은 문제입니다. 내가 처리하고 싶지 않은 모든 단일 컨트롤에 대해 생각해야합니다. 그러나 그것이 유일한 방법일지도 모른다. –