मुझे एहसास हुआ कि किसी EventTrigger से जुड़े InvokeCommandAcction का उपयोग करते समय, मूल ईवेंट अभी भी पैरेंट तत्वों तक पहुंच रहा है जब तक इसे संभाला नहीं जाता है। खैर, मुझे लगता है कि यह एक अपेक्षित व्यवहार है। लेकिन मेरा सवाल यह है कि मैं ईवेंट को कैसे संभाला जा सकता हूं ताकि यह पूरे यूआई पेड़ के माध्यम से फैल न सके?InvokeCommandAction को घटनाओं को पैरेंट तत्वों से प्रचारित करने से कैसे रोकें?
दरअसल, जैसा कि आप इस घटना को कमांड में संभालते हैं, सब कुछ इस आदेश में संभाला जाएगा, इसलिए इसे प्रसारित करने की आवश्यकता नहीं है। और एक कोने के मामले में मैंने पाया, यह कुछ अवांछित व्यवहार का कारण बनता है। उदाहरण के लिए, जब कोई उपयोगकर्ता तत्व को डबल क्लिक करता है तो मैं एक नई विंडो खोलता हूं (MouseDoubleClick ईवेंट)। समस्या यह है कि नई खिड़कियां खुलती हैं और फिर मुख्य विंडो वापस एक के सामने आती है क्योंकि माउसडब्लूक्लिक घटना यूआई पेड़ में शीर्ष तत्व तक पहुंच जाती है। वांछित व्यवहार नई खिड़की को सामने रखना होगा, लेकिन InvokeCommandAction ईवेंट को प्रसारित करने देता है, मुख्य विंडो फोकस वापस ले जाती है ...
मैं क्या कर सकता हूं इसके बजाय CallMethodAction परिसंपत्ति का उपयोग करना है, लेकिन जैसा कि मैं एक एमवीवीएम परिदृश्य में हूं, मैं अपने कोड में यूआई इवेंट तर्क नहीं चाहता हूं। भले ही यह मुझे घटना को निश्चित रूप से चिह्नित करने और इस मुद्दे को ठीक करने के लिए चिह्नित करे।
<UserControl x:Class="..."
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding Path=DisplayReportCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
...
</UserControl>
यह एक बहुत अच्छा विचार प्रतीत होता है। मैं और अधिक उत्तरों के लिए इंतजार करूँगा। धन्यवाद। – Ucodia
मैंने इस जवाब को देखा क्योंकि यह एक स्वच्छ समाधान है जिसे मैं एक एमवीवीएम परिदृश्य में उपयोग कर सकता हूं। – Ucodia
विंडोज फोन के लिए, RoutedEventArgs के बजाय GestureEventArgs का उपयोग करें। –