程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WPF中獲取鼠標指針下的元素

WPF中獲取鼠標指針下的元素

編輯:關於.NET

以前寫過一些GetElementUnderMouse之類的函數,要用到坐標換算而顯得有些 麻煩(特別是當元素有XXXTransform的時候)

今天看到Mouse類居然有一個DirectlyOver屬性,可以獲得鼠標下的元素, 很 奇怪,我的MSDN文檔以及VS2008智能提示中都沒有顯示該屬性,但反編譯一下可 以看到。

但必須注意到的一點是,WPF控件是由各個元素復合而成的,但Mouse類可不知 道這概念,所以不要期望它為了返回一個Button,其很可能會返回Button的 visualTree中的TextBlock等,所以,如果我們加上如下的方法就完美了:

public static T FindVisualParent<T>(UIElement  element) where T : UIElement
         {
             UIElement parent = element;
             while (parent != null)
             {
                 var correctlyTyped = parent as  T;
                 if (correctlyTyped != null)
                 {
                     return correctlyTyped;
                 }
                 parent =  VisualTreeHelper.GetParent(parent) as UIElement;
             }
             return null;
         }

兩者結合一下,我們的GetElementUnderMouse方法便可以如下書寫:

public static T GetElementUnderMouse<T>() where T:  UIElement
         {
             return FindVisualParent<T> (Mouse.DirectlyOver as UIElement);
         }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved