如何执行wpf屏幕外事件

本文关键字:wpf 屏幕 事件 执行 何执行 | 更新日期: 2023-09-27 18:23:52

我目前正在开发一个使用WPF和OpenGL的应用程序。由于空域对于我的项目来说不是一个令人满意的选项,我决定使用WPF渲染到位图。现在我坚持执行事件。到目前为止,我已经能够创建一个函数来遍历所需UIElement的VisualTree,但我找不到任何关于如何执行它们的事件的信息。

       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);

    }

如何执行wpf屏幕外事件

RaiseEvent(new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Left)
{
  RoutedEvent = Mouse.MouseDownEvent,
  Source = this,
});

在这里和这里回答:

提升WPF鼠标左按钮向下事件

http://alala666888.wordpress.com/2010/07/15/raise-event-manually-in-wpf/