سؤال

أحاول إطلاق حدث 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,
   };

هذه هي الطريقة التي أطلق بها الحدث في رمز الاختبار الخاص بي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top