以编程方式触发MouseLeftButtonDown事件

时间:2010-06-13 20:44:35

标签: c# wpf mouseleftbuttondown raiseevent

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

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

提前感谢您的帮助!

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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,
   };

这是我在测试代码中触发事件的方法。

答案 3 :(得分:0)

这是我用来引发任何import 'package:flutter/material.dart'; import 'package:grouped_list/grouped_list.dart'; void main() => runApp(MyApp()); List _elements = [ {'name': 'John', 'group': 'A'}, {'name': 'Will', 'group': 'B'}, {'name': 'Beth', 'group': 'A'}, {'name': 'Miranda', 'group': 'B'}, {'name': 'Mike', 'group': 'C'}, {'name': 'Danny', 'group': 'C'}, ]; class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: Scaffold( appBar: AppBar( title: Text('Grouped List View Example'), ), body: GroupedListView<dynamic, String>( elements: _elements, groupBy: (element) => element['group'], groupComparator: (value1, value2) => value2.compareTo(value1), itemComparator: (item1, item2) => item1['name'].compareTo(item2['name']), order: GroupedListOrder.DESC, useStickyGroupSeparators: true, groupSeparatorBuilder: (String value) => Padding( padding: const EdgeInsets.all(8.0), child: Text( value, textAlign: TextAlign.left, style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), ), ), itemBuilder: (c, element) { return Card( elevation: 8.0, margin: new EdgeInsets.symmetric(horizontal: 10.0, vertical: 6.0), child: Container( child: ListTile( contentPadding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 10.0), leading: Icon(Icons.account_circle), title: Text(element['name']), trailing: Icon(Icons.arrow_forward), ), ), ); }, ), ), ); } } 的点击事件的静态方法。

UIElement