Silverlight 全局鼠标按下事件处理程序

Posted

技术标签:

【中文标题】Silverlight 全局鼠标按下事件处理程序【英文标题】:Silverlight Global Mouse Down Event Handler 【发布时间】:2017-06-05 13:14:28 【问题描述】:

我正在拼命尝试为 IT 安全策略实施“会话不活动超时”。 sss 但是,我的不活动重置逻辑没有触发。我究竟做错了什么?由于 Visual Studio 在附加到 Silverlight 二进制文件时崩溃,我无法附加断点。我想知道问题是否非常微妙,例如在调用 App 构造函数时,还没有“当前 RootVisual”。由于#Silverlight 已死/过时,因此也使用#WPF 进行标记。示例代码如下。

namespace TestApp

  public partial class App : Application
  
    System.Windows.Threading.DispatcherTimer sessionTimer = new System.Windows.Threading.DispatcherTimer();

    public App()
    
      ResetSessionTimer();

      this.RootVisual.AddHandler(UIElement.MouseLeftButtonDownEvent, new MouseButtonEventHandler(rootVisual_MouseLeftButtonDown), true);
      //this.RootVisual.MouseLeftButtonDown += rootVisual_MouseLeftButtonDown;
      InitializeComponent();
    

    private void ResetSessionTimer()
    
      sessionTimer.Stop();
      sessionTimer.Tick -= sessionTimer_Tick;
      sessionTimer = new System.Windows.Threading.DispatcherTimer();
      sessionTimer.Interval = TimeSpan.FromMinutes(1);
      sessionTimer.Tick += sessionTimer_Tick;
      sessionTimer.Start();
    

    private void sessionTimer_Tick(object sender, EventArgs e)
     
       System.Windows.Browser.htmlPage.Document.GetElementById("LogoutButton").Invoke("click", null);
    

    private void rootVisual_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
    
      // added this alert to see if code is even firing.
      System.Windows.Browser.HtmlPage.Window.Invoke("alert", "hello, world");
      ResetSessionTimer();
      e.Handled = false;
    
  

【问题讨论】:

【参考方案1】:

我发现了这一点——在代码的某个地方,之前的开发人员使用新的 MainPage() 覆盖了 this.RootVisual 元素,以启用他们自己开发的依赖注入/MVVM 架构。我将 App() 构造函数中的逻辑移到了这个赋值运算符之后,它就像魔术一样工作。

【讨论】:

以上是关于Silverlight 全局鼠标按下事件处理程序的主要内容,如果未能解决你的问题,请参考以下文章

全局鼠标事件处理程序

Javascript事件

javascript学习笔记整理(事件)

Silverlight 4.0 - 使用鼠标事件进行图像裁剪

键盘输入鼠标输入焦点处理

在 MouseDown 事件处理程序中检测 Ctrl+Left(鼠标按钮)