2011-02-10 64 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對鼠標事件非常有用,因爲您可以捕獲已處理的事件! – 2013-02-13 03:45:57