2012-03-30 6 views
6

WPF 응용 프로그램에 검색 화면이 있습니다. 이 화면은 TabControl의 TabItem에서 UserControl로 구현됩니다. 사용자가 검색 탭으로 전환하면 포커스가 특정 필드로 이동하게됩니다.WPF 응용 프로그램에서 포커스가 어디에서 발생하는지 어떻게 알 수 있습니까?

그래서 Loaded 이벤트 처리기를 Xaml의 UserControl 태그에 추가하고 Loaded 이벤트 처리기에서 초기 포커스를 갖길 원하는 Focus 메서드를 호출했습니다. 이것은 제가 오늘 사용하고있는 Telerik 컨트롤 라이브러리를 업그레이드하기 전까지 훌륭했습니다. 이제 Search (검색) 탭으로 전환하면 포커스가 원하는 필드에 있지 않지만 포커스가있는 컨트롤을 알 수는 없습니다.

포커스를 이미 갖고 싶은 필드에는 다른 이유로 GotFocus & LostFocus 이벤트 처리기가 있습니다. Windows Forms에서 LostFocus 이벤트 처리기 인수는 포커스를받을 컨트롤을 알려줍니다. 그래서 LostFocus 핸들러에 중단 점을 넣습니다. &은 WPF의 LostFocus 이벤트 핸들러에 대한 인수에 해당 정보가 포함되어 있지 않음을 발견했습니다.

UserControl의 모든 컨트롤에 GotFocus 처리기를 두지 않고 포커스가 어디로 가는지 어떻게 알 수 있습니까?

토니

답변

5

LostFocus 이벤트 대신 LostKeyboardFocus 첨부 이벤트에 중단 점을 넣을 수 있습니다. 그것은 어떤 요소가 포커스를 가지고 포커스가 어디 있는지를 보여주는 속성을 가진 KeyboardFocusChangedEventArgs 클래스를 사용합니다.

private void textBox1_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) 
{ 
    textBox1.Text = ((FrameworkElement)e.NewFocus).Name ; 
} 
+0

감사합니다. 이것이 내가 필요한 것입니다. 폼에있는 체크 박스로 이동했기 때문에 초점이 어디로 가고 있는지 쉽게 알 수 없었습니다. 그리고 이것은 체크 상자 안쪽에 파선 상자를 넣어 초점을 보여줍니다. 당신이 정말로 그것을 찾고 있지 않다면,보기가 어렵고보기가 어렵습니다. 적어도, 그것은 내 응용 프로그램에 있습니다. –

+0

@Tony 도움이 된 것을 기쁘게 생각합니다. –

8

봅니다 탭을 키를 누르면 당신이 초점 컨트롤을 찾을 수 있는지 확인합니다. 이 Q/A에 제안

또한 Snoop를 사용할 수 있습니다 Any tips on debugging focus issues in WPF? 우선 들어

는, 스눕 현재 집중 요소 및 상태 표시 줄에 현재 FocusScope을 보여줍니다.

당신은 당신에게 모든의 GotFocus 및 LostFocus 이벤트를 보여 얻을 수 있습니다 :

1. Run your app. 
2. Run Snoop. 
3. Choose your app in the dropdown. 
4. Click the binoculars ("Snoop") button. 
5. On the right pane, click the Events tab. 
6. Click to bring down the dropdown. 
7. Scroll down to the Keyboard section and check GotKeyboardFocus, LostKeyboardFocus, and optionally the PreviewXXX events. 
8. Now do what you need to do to manipulate focus and watch the Snoop window. 

마찬가지로 당신은 FocusManager를 이벤트 같은 방법으로 추적 할 수 있습니다.

+0

감사합니다. 나는 아침에 그 사진을 줄 것입니다. –

관련 문제