2010-12-03 13 views
7

मेरे पास एक Winforms एप्लिकेशन है जो एक ElementHost के अंदर एक WPF नियंत्रण (Avalon संपादित करें यदि यह महत्वपूर्ण है) का उपयोग कर रहा है।Winforms में WPF ईवेंट

ऐसा लगता है कि यह ठीक काम कर रहा है, लेकिन मैं Winforms तरीके (रूटेड कमांड्स और इनपुट जेस्चर के बिना) में इस नियंत्रण की कीप्रेस घटनाओं को संभालने में सक्षम होना चाहता हूं, इसलिए मैं केवल प्रोजेक्ट की कुंजीडाउन ईवेंट को KeyPreview सेट के साथ संभाल सकता हूं , लेकिन डब्ल्यूपीएफ कार्यक्रम फॉर्म पर बुलबुला प्रतीत नहीं होता है।

तो मूल रूप से, Winforms तरीके से एक WPF नियंत्रण पर आप KeyDown ईवेंट को कैसे एक्सेस कर सकते हैं?

उत्तर

6

आप WinForm की KeyDown से कनेक्ट करने की कोशिश करने के बजाय, WpfControl के लिए कस्टम ईवेंट हैंडलर जोड़ने का प्रयास कर सकते हैं।

यहां उदाहरण है। मान लें: आपका WinForm प्रकार Form1 है, WpfControl UserControl1 है, और WpfControl के लिए तत्व होस्ट को कॉल किया जाता है (कभी अनुमान नहीं लगाया जाएगा) - elementHost।

public Form1() 
{ 
    InitializeComponent(); 
    elementHost.ChildChanged += ElementHost_ChildChanged; 
} 

private void ElementHost_ChildChanged(object sender, ChildChangedEventArgs e) 
{ 
    var ctr = (elementHost.Child as UserControl1); 
    if (ctr == null) 
     return; 
    ctr.KeyDown += ctr_KeyDown; 
} 

void ctr_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) 
{ 
    /* your custom handling for key-presses */ 
} 

युपीडी: e.KeyboardDevice.Modifiers (ङ System.Windows.Input.KeyEventArgs है) Ctrl, Alt, आदि के बारे में जानकारी संग्रहीत करता

+0

समस्या यह है कि वास्तव में System.Windows.Input.KeyEventArgs संशोधक कुंजियों का खुलासा नहीं करता है, तो आप कर सकते हैं 'Ctrl + Z', केवल 'Z' या 'Ctrl' के लिए जांच न करें। यहां तक ​​कि मुख्य संपत्ति संशोधक का थोड़ा सा संयोजन नहीं है और मैंने जो देखा है उससे कुंजी, यह केवल मुख्य कुंजी दबाया गया है। – Miguel

+0

@ मिगुएल, अपडेट देखें: e.KeyboardDevice.Modifiers आपको जो चाहिए वह है। –

+0

ओह, इसके लिए धन्यवाद, मैंने कभी काम नहीं किया होगा। Upvoted। – Miguel