2012-02-09 4 views
0

현재 WPF 및 OpenGL을 사용하는 응용 프로그램에서 작업 중입니다. Airspace는 내 프로젝트에서 만족할만한 옵션이 아니기 때문에 WPF를 Bitmap으로 렌더링하기로 결정했습니다. 이제는 이벤트가 실행되는 데 방해가됩니다. 지금까지 필요한 UIElements VisualTree 걷는 함수를 만들 수 있었지만 iire 이벤트를 실행하는 방법에 대한 정보를 찾을 수 없습니다.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); 



    } 

답변

관련 문제