2010-06-13 13 views
8

मैं एक WPLftButtonDown ईवेंट को मैन्युअल रूप से एक WPF नियंत्रण पर प्रोग्राम करने के लिए मैन्युअल रूप से आग लगाने की कोशिश कर रहा हूं, क्योंकि मैं माइक्रोसॉफ्ट सर्फेस एसडीके का उपयोग कर रहा हूं, जो MouseLeftButtonDown घटनाओं को नहीं चलाता है, लेकिन ContactDown ईवेंट। मूल रूप से मैं एक संपर्कडाउन घटना को संभालने के दौरान, नियंत्रण पर सही व्यवहार को दूर करने के लिए, माउसLeftButtonDown ईवेंट को नियंत्रण में धक्का देने की कोशिश कर रहा हूं।फायरिंग MouseLeftButtonDown घटना प्रोग्रामेटिक रूप से

मुझे लगता है कि मुझे माउसबटन EventArgs के साथ ऐसा करने के लिए नियंत्रण पर RaiseEvent विधि का उपयोग करना है, लेकिन मुझे पैरामीटर को समझने में कुछ परेशानी हो रही है।

आपकी मदद के लिए अग्रिम धन्यवाद!

उत्तर

5

आप Win32 इंटरऑप का उपयोग कर माउस और प्रमुख घटनाओं को धोखा दे सकते हैं। MSDN/pinvoke.net पर SendInput फ़ंक्शन की जांच करें।

ध्यान दें कि इससे सिस्टम और अन्य अनुप्रयोगों को लगता है कि माउस वास्तव में क्लिक किया गया था। यदि आप सिर्फ एक WPF ईवेंट शुरू करना चाहते हैं, तो RaiseEvent(new RoutedEventArgs(UIElement.MouseLeftButtonDownEvent)) आज़माएं।

+0

टिप के लिए धन्यवाद। मुझे आपके द्वारा पोस्ट की गई RaiseEvent विधि के साथ अपवाद मिल रहा है: 'System.Windows.RoutedEventArgs' प्रकार का ऑब्जेक्ट 'System.Windows.Input.MouseButtonEventArgs' प्रकार में परिवर्तित नहीं किया जा सकता है। – RajenK

+0

'RaiseEvent (नया माउसबटन EventArgs (माउस। प्राइमरीडिवाइस, पर्यावरण। टिककाउंट, माउसबटन। लेफ्ट)); ' – devios1

+1

अमान्य ऑपरेशन अपवाद उस के साथ होता है: प्रत्येक रूटेडएन्टएआरएआरएस के साथ जुड़े गैर-शून्य रूटेडएवेंट होना चाहिए। – RajenK

2

नियंत्रण में एक निश्चित घटना को ट्रिगर करने की इच्छा अक्सर कोड में डिज़ाइन समस्या का सूचक होता है। इवेंट हैंडलर ट्रिगर व्यवहार होना चाहिए, इसे निष्पादित नहीं करना चाहिए। मैं सुझाव दूंगा कि आप उस कोड को स्थानांतरित करें जो MouseLeftButtonDown ईवेंट हैंडलर द्वारा एक अलग विधि में ट्रिगर की गई कार्रवाई करता है। फिर उसी विधि को ContactDown ईवेंट हैंडलर से बुलाया जा सकता है।

+0

मैं मानता हूं कि यह सबसे अच्छा समाधान होगा, लेकिन क्योंकि मेरे पास इस विशेष नियंत्रण (केवल बाइनरी) के स्रोत कोड तक पहुंच नहीं है, मुझे डर है कि काम नहीं करेगा। – RajenK

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

इस प्रकार मैं अपने टेस्ट कोड में ईवेंट को फायर करता हूं।

संबंधित मुद्दे