【问题标题】:Getting a notification when focus changes in Silverlight 4?Silverlight 4 中焦点更改时收到通知?
【发布时间】:2011-02-10 23:44:52
【问题描述】:

我正在尝试调试缺少/额外制表位的一些问题。是否可以附加某种全局事件,以便在焦点更改时记录哪个元素获得焦点?谢谢!这是我现在正在做的事情,效果很好,但我仍然很好奇是否还有其他方法:

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 + ")"));
    }
}

【问题讨论】:

    标签: .net silverlight xaml silverlight-4.0 focus


    【解决方案1】:

    您应该能够为“最顶层”容器订阅GotFocus 事件。我没有看到 RoutedEventArgs 的任何 Handled 标志,据我所知,它应该总是能到达它

    <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 + ")"));
    }
    

    【讨论】:

      【解决方案2】:

      您应该能够使用 AddHandler 函数将焦点事件与您的控件挂钩。

      看一下 AddHandler 签名,即使一个事件已经被处理,你也应该能够得到一个通知。

      【讨论】:

      • 无法使用 AddHandler 函数。你可以 this.GotFocus += .... 但它似乎对我不起作用,除非我在 xaml 中添加了处理程序。 AddHander 对鼠标事件非常有用,因为您可以捕获已处理的事件!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-10
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多