إطلاق Mouseleftbuttondown حدث برمجي
-
27-09-2019 - |
سؤال
أحاول إطلاق حدث Mouseleftbuttondown يدويًا على عنصر تحكم WPF برمجيًا ، حيث أستخدم Microsoft Surface SDK ، والذي لا يطلق النار على أحداث Mouseleftbuttondown ، ولكن أحداث ContactDown. في الأساس ، أحاول دفع حدث Mouseleftbuttondown إلى السيطرة ، لإطلاق السلوك الصحيح على السيطرة ، أثناء التعامل مع حدث ContactDown.
أظن أنه يتعين علي استخدام طريقة الزحام بطريقة أو بأخرى على عنصر التحكم للقيام بذلك باستخدام MouseButToneventArgs ، لكنني أواجه بعض المتاعب في اكتشاف المعلمات.
شكرا مقدما لمساعدتكم!
المحلول
يمكنك محاكاة ساخرة للماوس والأحداث الرئيسية باستخدام Win32 interop. التحقيق في وظيفة sendInput على MSDN/pinvoke.net.
لاحظ أن هذا سيؤدي إلى اعتقاد النظام والتطبيقات الأخرى أنه تم النقر على الماوس بالفعل. إذا كنت ترغب فقط في بدء حدث WPF ، فحاول RaiseEvent( new RoutedEventArgs( UIElement.MouseLeftButtonDownEvent ) )
.
نصائح أخرى
غالبًا ما تكون الرغبة في تشغيل حدث معين في عنصر التحكم مؤشراً على مشكلة التصميم في الكود. يجب على معالجات الأحداث تشغيل السلوك ، لا يؤديه. أود أن أقترح عليك تحريك الكود الذي يؤدي الإجراء الناتج عن MouseLeftButtonDown
معالج الأحداث في طريقة منفصلة. ثم يمكن استدعاء نفس الطريقة من ContactDown
معالج الأحداث.
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,
};
هذه هي الطريقة التي أطلق بها الحدث في رمز الاختبار الخاص بي.