none
在非鼠标事件中怎样获取鼠标相对于窗体控件的位置 RRS feed

答案

  • 可以在应用程序启动时注册Application.RootVisual的MouseMove事件,然后在事件处理中把鼠标位置存入一个全局存储位置。

    启动时:

    Application.Current.RootVisual.MouseMove += 
      this.rootVisual_MouseMove;
    

    然后:

    /// <summary>
    /// Handles the MouseMove event of the root visual control.
    /// </summary>
    /// <param name="sender">The source of the event.</param>
    /// <param name="e">
    /// The <see cref="System.Windows.Input.MouseEventArgs"/> 
    /// instance containing the event data.</param>
    [System.Diagnostics.DebuggerStepThrough]
    private void rootVisual_MouseMove (object sender, MouseEventArgs e)
    {
      this._currentMousePosition = e.GetPosition (null);
    }
    
    如此便可以随时从_currentMousePosition取得鼠标位置。

    • 已标记为答案 Dodu.NET 2010年6月7日 12:26
    2010年6月6日 4:48
  • 要在应用程序启动时手动设置它,一般在App的Application_Startup中。仅能设置一次,之后就可以随时使用。

    this.RootVisual = new MainPage();
    至于注册鼠标事件的具体位置,根据逻辑来定,简单一点的话初始化MainPage时就立即注册,并在事件处理方法中把值存入静态属性。

     


    Tech Blog: http://gildor.cnblogs.com
    • 已标记为答案 Dodu.NET 2010年6月7日 12:26
    2010年6月7日 7:38

全部回复

  • 你好,

         Silverlight 中没有这样的APi支持,你可看看这个Workaround

         http://forums.silverlight.net/forums/t/32511.aspx

    2010年6月4日 6:13
  • 可以在应用程序启动时注册Application.RootVisual的MouseMove事件,然后在事件处理中把鼠标位置存入一个全局存储位置。

    启动时:

    Application.Current.RootVisual.MouseMove += 
      this.rootVisual_MouseMove;
    

    然后:

    /// <summary>
    /// Handles the MouseMove event of the root visual control.
    /// </summary>
    /// <param name="sender">The source of the event.</param>
    /// <param name="e">
    /// The <see cref="System.Windows.Input.MouseEventArgs"/> 
    /// instance containing the event data.</param>
    [System.Diagnostics.DebuggerStepThrough]
    private void rootVisual_MouseMove (object sender, MouseEventArgs e)
    {
      this._currentMousePosition = e.GetPosition (null);
    }
    
    如此便可以随时从_currentMousePosition取得鼠标位置。

    • 已标记为答案 Dodu.NET 2010年6月7日 12:26
    2010年6月6日 4:48
  • 注册鼠标事件的位置应该在哪?程序启动的时候没办法使用MouseEventArgs

    如果在具体的页面中,Application.Current.RootVisual 的值为 Null

    求解!!


    人要诚实!还要踏实! 我先为人人,人人再为我! 我的Spaces: http://mydodu.spaces.live.com/
    • 已标记为答案 Dodu.NET 2010年6月7日 12:26
    • 取消答案标记 Dodu.NET 2010年6月7日 12:26
    2010年6月7日 3:36
  • 要在应用程序启动时手动设置它,一般在App的Application_Startup中。仅能设置一次,之后就可以随时使用。

    this.RootVisual = new MainPage();
    至于注册鼠标事件的具体位置,根据逻辑来定,简单一点的话初始化MainPage时就立即注册,并在事件处理方法中把值存入静态属性。

     


    Tech Blog: http://gildor.cnblogs.com
    • 已标记为答案 Dodu.NET 2010年6月7日 12:26
    2010年6月7日 7:38
  • ok,thanks...


    人要诚实!还要踏实! 我先为人人,人人再为我! 我的Spaces: http://mydodu.spaces.live.com/
    2010年6月7日 12:25