2011-12-20 2 views
1

폼에 텍스트 상자가 있고 포커스 수신 방법에 따라 포커스를받을 때 다른 동작을 수행하려고합니다.WPF에서 포커스 수신 방법을 결정하는 방법

사용자가 텍스트 상자를 클릭하면 커서가 상자 안의 텍스트 문자열의 끝에 배치되는 표준 방법을 원합니다. 사용자가 텍스트 상자로 이동하면 텍스트 상자에 포함 된 텍스트를 모두 선택합니다.

우아한 방법이 있나요?

답변

1

응용 프로그램 수준 (또는 부모 수준) 터널링 이벤트를 설정하여 마우스 클릭 또는 키보드 눌렀 음을 나타내는 플래그를 토글 할 수 있도록 시도하는 것이 좋습니다 (PreviewMouseDownPreviewKeyDown). 해당 플래그를 확인하여 이전에 눌려진 내용에 따라 텍스트 상자에 포커스가있을 때 적절한 작업을 수행 할 수 있습니다.

+0

실제로, PreviewMouseDown은 텍스트 상자 자체를 확인하는 것이 좋습니다. 그러나 나머지는 정확합니다. 좋은 대답입니다! –

+0

고맙습니다. GotFocus 또는 PreviewGotKeyboardFocus를 처리 할 때 포커스가받는 방식을 결정할 수있는 우아한 솔루션을 배우려고했습니다. 나는 시간의 90 %를 작동하는 Tab 키에 대해 KeyState를 검사 해 보았습니다. 그러나 포커스 이벤트가 처리 될 때 Tab 키가 여전히 눌려 있는지 여부에 따라 타이밍이 달라졌습니다. 또한 Tab을 직접 가로 채서 Tab을 처리하여 순회 요청을 보낸 다음 그 다음 요 소를 선택하여 순회 요청에 의해 잘못된 항목을 계속 선택하여 부모에게 가서 다음 자식이 아닌지 확인했습니다. – WPFNewbie

+0

@WPFNewbie : 키 이벤트가 탭 키에서 왔는지 확인할 필요는 없습니다. 단지 _a_ 키였습니다. 이러한 이벤트는 대부분 상호 배타적이므로 모든 키 누르기는 키보드에서 발생하며 클릭은 마우스에서 발생한 것입니다. 응용 프로그램에서 포커스를 변경하는 대체 방법을 설정하지 않으면 마우스 클릭이 키 이벤트를 트리거하는 방식이 없으며 그 반대의 경우도 마찬가지입니다. –

관련 문제