2011-02-10 15 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イベントをサブスクライブすることができるはずですコンテナ。私はあなたがあなたのコントロールにフォーカスイベントにフックするのAddHandler機能を使用することができるはずです、それは常にそれを

<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

に達しなければならないので、私の知る限りRoutedEventArgsのための任意の取扱フラグは表示されません。

AddHandlerシグネチャを見れば、イベントが処理されたとしても、通知を受け取ることができるはずです。

+0

AddHandler関数を使用する方法はありません。あなたはthis.GotFocus + = ....することができますが、xamlにハンドラを追加しない限り、私のためにはうまくいかなかったようです。 AddHanderは、既に処理されたイベントを捕まえることができるので、マウスイベントには本当に便利です! –

関連する問題