2010-08-30 8 views
5

ठीक नहीं है, मुझे यकीन नहीं है कि मैं समझता हूं कि यह कैसे काम करना चाहिए, लेकिन मेरे ऐप में मैंने एक रूट इशारा (Ctrl + K) को रूटेड कॉमांड में बाध्य किया है। कोई फर्क नहीं पड़ता कि मैं अपने ऐप में कहां फोकस करता हूं, मुख्य संयोजन काम करता है, सिवाय इसके कि अगर मैं इसे विंडोज़ वर्म्सहोस्ट के अंदर उपयोग करता हूं जिसमें एक वेब ब्राउज़र नियंत्रण होता है। मैंने वेब ब्राउज़र नियंत्रण के लिए पूर्वावलोकनकिडडाउन ईवेंट को कैप्चर करने और IsInputKey को गलत पर सेट करने का प्रयास किया। सिद्धांत रूप में, मेजबान को मुख्य इशारा नहीं किया जाना चाहिए और इसे ऊपर भेजना चाहिए, लेकिन ऐसा नहीं होता है।WPF WindowsFormsHost अनचाहे कुंजी जेस्चर

अद्यतन:

अगर मैं नियंत्रण के bool IsInputKey (कुंजी keyData) ओवरराइड और झूठे लौटने के लिए, यह काम करता है और आदेश एकदम सही ढंग से निष्पादित हो जाता है।

शायद पूर्वावलोकनकेडडाउन को संभालने के तरीके में कुछ गड़बड़ है?

private void browser_PreviewKeyDown (object sender, PreviewKeyDownEventArgs e) 
{ 
    e.IsInputKey = false; 
} 

मुझे उम्मीद है कि यह मुझे मेरी मुख्य विंडो से कोई भी महत्वपूर्ण संयोजन कैप्चर करने की अनुमति दे। मैं इसे नियंत्रण को विस्तारित करने की तुलना में ईवेंट हैंडलिंग के साथ ठीक कर दूंगा ...

उत्तर

0

यदि मैं इसे सही ढंग से समझता हूं तो आप रोकना चाहते हैं कि कीस्ट्रोक होस्टेड विनफॉर्म द्वारा संभाला जाता है। हालांकि, आपका उदाहरण कोड इंगित करता है कि आप होस्ट किए गए नियंत्रण में इसे संभालने का प्रयास करते हैं।

सुरंग घटनाओं को संभालने के लिए आप इसे WPF दृश्य पेड़ में होस्ट किए गए नियंत्रण के बाहर "बेहतर" संभालते हैं। आप कर सकते हैं - उदाहरण के लिए - इसे संभाल इस प्रकार है:

private void Grid_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    e.Handled = true; 
} 
:

<Grid PreviewKeyDown="Grid_PreviewKeyDown" PreviewMouseDown="Grid_PreviewMouseDown" Height="250" Width="250"> 
    <WindowsFormsHost Name="windowsFormsHost1"> 
     <wf:Form1 TopLevel="False" /> 
    </WindowsFormsHost> 
</Grid> 

इस प्रकार संभाला के रूप में घटना की स्थापना करके, यह है कि घटना दृश्य पेड़ आगे प्रचारित किया जाता है से बचाता है

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