2010-06-20 14 views
5

में सही नियंत्रण छोड़ दिया और नियंत्रण पर कब्जा नहीं मैं एक WPF आवेदन जहां मुझे लगता है कि कुंजी इशारों Ctrl + और Ctrl + का उपयोग कस्टम आदेशों को परिभाषित किया है की है। मेरे खिड़की एक TextBox और एक ScrollViewer और है TextBox ध्यान केंद्रित Ctrl + और Ctrl + कदम अगले या पिछले शब्द है, जो ठीक है की शुरुआत के लिए कर्सर को रखता हो।मेक ScrollViewer WPF

लेकिन ScrollViewer पर यह रूप में अगर मैं सिर्फ दबाया था या क्षैतिज स्क्रॉल कदम बनाता है। Ctrl + और Ctrl + जहां Command परिभाषित किया गया है बुलबुला अप विंडो के लिए मेरे ScrollViewer से करने के लिए घटनाओं की अनुमति देने के लिए सबसे आसान तरीका क्या है?

उत्तर

4

तो मैं निम्नलिखित

public class MyScrollViewer : ScrollViewer 
{ 
    protected override void OnKeyDown(KeyEventArgs e) 
    { 
     if (e.KeyboardDevice.Modifiers == ModifierKeys.Control) 
     { 
      if (e.Key == Key.Left || e.Key == Key.Right) 
       return; 
     } 
     base.OnKeyDown(e); 
    } 
} 

मुझे लगता है कि चाल को समझने के लिए कि घटना शीर्ष पर शुरू होता है और जिस तरह से नीचे है काम करता है कार्य करके यह काम कर गया। फिर प्रत्येक "परत" का बैक अप जिस तरह से हैंडल बूलियन की जांच करता है और यदि यह सत्य पर सेट नहीं है तो यह निर्धारित करेगा कि यह कुछ करेगा और अगर ऐसा करता है तो इसे सेट करें। मुझे अपने शॉर्टकट्स के लिए इस व्यवहार को शॉर्ट सर्किट करने की आवश्यकता थी ताकि जब भी यह विंडो स्तर पर वापस आ जाए तो हैंडल अभी भी झूठा होगा।

+0

बिल्कुल सही। धन्यवाद! +1 –

3

आप ScrollViewer के PreviewKeyDown घटना को ओवरराइड और e.Handled = true सेट और (this.Parent as FrameworkElement).RaiseEvent(e); की तरह कुछ का उपयोग कर माता-पिता को घटना को पारित करता है, तो कुंजी दबाया कुंजी संयोजन आप अपने आदेश करने के लिए आवंटित में से एक थे चाहिए।

+0

स्क्रॉल व्यूअर (WPF में) के लिए यह सही उत्तर है। OnKeyDown घटना तीर कुंजी पर आग नहीं है, लेकिन यह करता है। धन्यवाद! –

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