以编程方式触发MouseLeftButtonDown事件
我试图以编程方式手动触发WPF控件上的MouseLeftButtonDown事件,因为我使用Microsoft Surface SDK,它不会触发MouseLeftButtonDown事件,而是触发ContactDown事件。基本上我试图将MouseLeftButtonDown事件向下推送到控件,以在处理ContactDown事件时触发控件上的正确行为。以编程方式触发MouseLeftButtonDown事件
我猜我必须以某种方式使用控件上的RaiseEvent方法来做到这一点与MouseButtonEventArgs,但我有一些麻烦搞清楚参数。
在此先感谢您的帮助!
您可以使用Win32 interop欺骗鼠标和键盘事件。调查MSDN/pinvoke.net上的SendInput函数。
请注意,这将导致系统和其他应用程序认为鼠标实际上被点击。如果您只想启动WPF事件,请尝试RaiseEvent(new RoutedEventArgs(UIElement.MouseLeftButtonDownEvent))
。
希望在控件中触发某个事件常常是代码中的设计问题的指示器。事件处理程序应该触发行为,而不是执行它。我建议您将执行由MouseLeftButtonDown
事件处理程序触发的操作的代码移动到单独的方法中。然后可以从ContactDown
事件处理程序调用相同的方法。
我同意这将是最好的解决方案,但由于我没有访问此特定控件的源代码(只有二进制文件),恐怕这是行不通的。 – RajenK 2010-06-13 20:53:01
var grid = new Grid();
int timestamp = new TimeSpan(DateTime.Now.Ticks).Milliseconds;
const MouseButton mouseButton = MouseButton.Left;
var mouseDownEvent =
new MouseButtonEventArgs(Mouse.PrimaryDevice, timestamp, mouseButton) {
RoutedEvent = UIElement.MouseLeftButtonDownEvent,
Source = grid,
};
这是我在测试代码中触发事件的方式。
感谢您的提示。我收到您发布的RaiseEvent方法的异常: 'System.Windows.RoutedEventArgs'类型的对象无法转换为类型'System.Windows.Input.MouseButtonEventArgs'。 – RajenK 2010-06-15 11:18:17
尝试'RaiseEvent(新的MouseButtonEventArgs(Mouse.PrimaryDevice,Environment.TickCount,MouseButton.Left));' – devios1 2010-06-15 12:08:23
InvalidOperationException发生那个: 每个RoutedEventArgs必须有一个非空的RoutedEvent与它关联。 – RajenK 2010-06-21 14:23:24