2011-02-10 2 views
2

누락/추가 탭 정지와 관련된 문제를 디버그하려고합니다. 포커스가 바뀔 때마다 포커스가있는 요소를 기록 할 수 있도록 연결할 수있는 일종의 글로벌 이벤트가 있습니까? 감사! 여기에 내가 충분히 잘 작동하는, 지금 뭘하는지,하지만 다른 방법이 있는지에 여전히 궁금 :Silverlight 4에서 포커스가 변경 될 때 알림 받기?

DispatcherTimer timer = new DispatcherTimer(); 
timer.Interval = TimeSpan.FromSeconds(0.2); 
timer.Tick += onTick; 
timer.Start(); 

// ... 

private object LastFocusedElement; 
private void onTick(object sender, EventArgs e) 
{ 
    object elem = FocusManager.GetFocusedElement(); 
    if(LastFocusedElement != elem) 
    { 
     LastFocusedElement = elem; 
     System.Diagnostics.Debug.WriteLine("+++FOCUS+++ Focus changed to: " + elem + (elem == null ? "" : " (" + elem.GetType().Name + ")")); 
    } 
} 

답변

2

당신은 "최상위의 GotFocus 이벤트에 가입 할 수 있어야한다 "컨테이너. 내가 지금까지 내가 말할 수있는 RoutedEventArgs에 대한 어떤 취급 플래그를 볼 수 없습니다, 그것은 항상

<UserControl ... 
      GotFocus="UserControl_GotFocus"> 
    <!-- Lots of Nested Controls --> 
</UserControl> 

private void UserControl_GotFocus(object sender, RoutedEventArgs e) 
{ 
    object elem = e.OriginalSource; 
    System.Diagnostics.Debug.WriteLine("+++FOCUS+++ Focus changed to: " + elem + (elem == null ? "" : " (" + elem.GetType().Name + ")")); 
} 
-1

당신은 당신의 통제와 함께 초점 이벤트를 연결하는 AddHandler에 기능을 사용할 수 있어야합니다 도달한다.

AddHandler 시그니처를 살펴보면 이벤트가 처리 된 경우에도 알림을받을 수 있어야합니다.

+0

AddHandler 기능을 사용할 방법이 없습니다. 할 수 있습니다 this.GotFocus + = ....하지만 xaml에 처리기를 추가하지 않으면 그것은 나를 위해 작동하지 않았다. AddHander는 마우스 이벤트에 유용합니다. 이미 처리 된 이벤트를 잡을 수 있습니다! –

관련 문제