以编程方式触发MouseLeftButtonDown事件

Raj*_*enK 8 c# wpf mouseleftbuttondown raiseevent

我正在尝试以编程方式在WPF控件上手动触发MouseLeftButtonDown事件,因为我使用的是Microsoft Surface SDK,它不会触发MouseLeftButtonDown事件,而是触发ContactDown事件.基本上我正在尝试将MouseLeftButtonDown事件向下推送到控件,以在处理ContactDown事件时触发控件上的正确行为.

我猜我必须以某种方式使用控件上的RaiseEvent方法来实现MouseButtonEventArgs,但是我在查找参数时遇到了一些麻烦.

在此先感谢您的帮助!

Fre*_*örk 5

希望在控件中触发某个事件通常是代码中设计问题的一个指标。事件处理程序应该触发行为,而不是执行它。我建议您将执行由MouseLeftButtonDown事件处理程序触发的操作的代码移动到一个单独的方法中。然后可以从ContactDown事件处理程序调用相同的方法。


dev*_*os1 5

您可以使用Win32互操作欺骗鼠标和键事件.调查MSDN/pinvoke.net上的SendInput函数.

请注意,这将导致系统和其他应用程序认为鼠标实际被单击.如果您只想发起WPF活动,请尝试RaiseEvent( new RoutedEventArgs( UIElement.MouseLeftButtonDownEvent ) ).

  • 确定这个工程:`startOpBtn.RaiseEvent(新MouseButtonEventArgs(Mouse.PrimaryDevice,Environment.TickCount,MouseButton.Left){RoutedEvent = Button.ClickEvent});`但是,它使用了click事件.`UIElement.MouseLeftButtonDown`和`UIElement.MouseLeftButtonUp`编译和运行,但他们不会"点击"按钮,可能是因为鼠标光标需要实际上是在按钮上,使击中检测工作. (8认同)
  • 谢谢你的提示。您发布的 RaiseEvent 方法出现异常:“System.Windows.RoutedEventArgs”类型的对象无法转换为“System.Windows.Input.MouseButtonEventArgs”类型。 (3认同)