2012-02-09 30 views
0

我目前正在使用WPF和OpenGL的應用程序。由於空域對我的項目來說不是一個令人滿意的選項,我決定使用WPF呈現給位圖。現在我堅持要執行事件。到目前爲止,我能夠創建一個函數來遍歷所需的UIElements的VisualTree,但是我無法找到關於如何執行這些事件的任何信息。如何執行wpf離線事件

 public static void MouseClickEventHandler(bool isleftbutton,int mouseX,int mouseY) 
    { 
     if(self == null) 
     { 
      return; 
     } 
     PointHitTestParameters p = new PointHitTestParameters(new Point(mouseX, mouseY)); 
     VisualTreeHelper.HitTest(self, new HitTestFilterCallback(delegate(DependencyObject o) 
      { 

       return HitTestFilterBehavior.Continue; 
      }), 
      new HitTestResultCallback(delegate(HitTestResult r) 
      { 

       UIElement el = r.VisualHit as UIElement; 
       while(true) 
       { 
        if(el != null) 
        { 
         if(el.Focusable && (el is FrameworkElement)) 
         { 

          if(isleftbutton) 
          { 
           Type t = el.GetType(); 
           MemberInfo[] mem = t.GetMembers(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); 
           Object locker = new Object(); 
           bool clickable = false; 

           Parallel.ForEach(mem, delegate(MemberInfo member) 
           { 
            if(member.Name.ToLower().Contains("click")) 
            { 
             lock(locker) 
             { 
              clickable = true; 
             } 

            } 
           }); 
           if(clickable) 
           { 
            //launch click event 

            Console.WriteLine("mouseClick:" + (el as FrameworkElement).Name); 

            return HitTestResultBehavior.Stop; 

           } 
          } 
          else 
          { 
           Console.WriteLine("mouseOver:" + (el as FrameworkElement).Name); 
           //launch mouse over event 

           return HitTestResultBehavior.Stop; 
          } 

         } 

         el = (UIElement)VisualTreeHelper.GetParent(el); 
        } 
        else 
        { 
         break; 
        } 
       } 

       return HitTestResultBehavior.Continue; 
      }), p); 



    } 

回答