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

时间:2017-01-20 14:04:38

标签: c# wpf silverlight

我拼命想要实现一个" Session Inactivity Timeout"用于IT安全策略。 SSS 但是,我的不活动重置逻辑不会触发。我究竟做错了什么?由于Visual Studio在附加到Silverlight二进制文件时崩溃,我无法附加断点。我想知道问题是否非常微妙,例如在调用App构造函数时,没有"当前的RootVisual"然而。用#WPF标记,因为#Silverlight已经死了/过时了。示例代码如下。

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 个答案:

答案 0 :(得分:0)

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