2010-03-10 25 views
5

मैं follwing कोड (काम कर रहे हैं जो नहीं है) है:डब्ल्यूपीएफ कीबोर्ड शॉर्टकट - यह क्यों काम नहीं कर रहा है?

private void Window_PreviewKeyDown(object sender, KeyEventArgs e) { 
    e.Handled = true; 
    if ((e.Key == Key.P) && (Keyboard.Modifiers == ModifierKeys.Alt)) { 
     MessageBox.Show("Thanks!"); 
    }    
} 

क्यों नहीं इस काम करता है? घटना फायरिंग है, लेकिन

(e.Key == Key.P) && (Keyboard.Modifiers == ModifierKeys.Alt)) 

कभी भी सत्य का मूल्यांकन नहीं करता है। मेरे समान Ctrl के बजाय इस तरह के काम में Alt का उपयोग कर की घटनाओं। इसके अलावा मेरी घटनाओं में CtrlऔरAlt भी काम करता है।

+0

क्या घटना स्वयं फायरिंग नहीं कर रही है, या सशर्त सत्य को विकसित नहीं कर रहा है? –

+0

Opps! मेरे प्रश्न को ठीक कर देगा। धन्यवाद! – Justin

+0

क्या यह एक WPF ऐप नहीं है? यदि ऐसा है तो यह घटना/स्रोत क्या है, डब्ल्यूपीएफ 3.5 KeyEventArgs में कोई संशोधक संपत्ति नहीं है ???? –

उत्तर

3

WPF में कुंजी के साथ काम करने के लिए एक बेहतर तरीका Key Gestures

जैसे है ध्यान दें कि यह एक समाधान नहीं

<Window.InputBindings> 
    <KeyBinding Command="ApplicationCommands.Open" Gesture="ALT+P" /> 
</Window.InputBindings> 

वहाँ यह करने के लिए अधिक है कि कि लेकिन आप इसे आसानी से पर्याप्त काम करेंगे है एक उदाहरण है,। कुंजी को संभालने के लिए यह डब्ल्यूपीएफ तरीका है!

पी :-)

+0

मैंने कीबाइंडिंग के बारे में कुछ पढ़ा है, लेकिन यह क्यों है कि वे keyevents का उपयोग करने से बेहतर हैं? – Justin

+1

संपूर्ण समाधान एप्लिकेशनकॉमैंड्स आदि के संयोजन के साथ उपयोग करना है। यह सिर्फ एक साफ पैटर्न है। इसके अलावा आप अमूर्त कमांड इत्यादि भी कर सकते हैं। इसमें थोड़ा सा है लेकिन मुझे नहीं लगता कि आपको वास्तव में काम करने का मूल तरीका मिल जाएगा क्योंकि घटनाएं कैसे आग लगती हैं। –

+1

आधिकारिक जानकारी के लिए http://msdn.microsoft.com/en-us/library/ms752308.aspx देखें। इसके अलावा http://en.csharp-online.net/WPF_Concepts%E2%80%94Controls_with_Built-In_Command_Bindings पर एक नज़र डालें - यह "क्यों?" के साथ मदद कर सकता है :-) –

2

आप के रूप में नीचे दिखाया गया है एक ModifierKeys साथ 'बिटवाइज़ और' क्या करने की जरूरत ...

 
    private void Window_PreviewKeyDown(object sender, KeyEventArgs e) 
    { 
     if ((e.Key == Key.P) && ((e.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)) 
     { 
      MessageBox.Show("Thanks!"); 
      e.Handled = true; 
     } 
    } 

इसके अलावा, e पैरामीटर का Handled गुण सेट करने के लिए मत भूलना ...

+0

मैंने गलती से कीबोर्ड के बजाए मेरे उदाहरण कोड में ई। मॉडिफायर का उपयोग किया। मॉडिफायर, जो मैं वास्तव में अपने आवेदन में उपयोग कर रहा हूं। मैं क्षमाप्रार्थी हूं। मैं कीबोर्ड के साथ काम करने के लिए आपका उदाहरण प्राप्त करने में सक्षम नहीं हूं। मॉडिफायर। – Justin

+0

मैं वास्तव में काम करने के लिए नहीं मिल सकता है? –

0

MSDN हमें इस उदाहरण देता है:

if(e.Key == Key.P && e.Modifiers == Keys.Alt) 

आप के लिए काम करता है?

+0

पॉल कोहलर ने कहा: "डब्ल्यूपीएफ 3.5 कीइवेंट एआरजीएस में कोई संशोधक संपत्ति नहीं है" मैंने गलती से मेरे उदाहरण कोड में ई। मॉडिफायर का उपयोग किया। इस गड़बड़ी के लिए मुझे माफ़ करें। – Justin

+0

मुझे लगता है कि हम में से कुछ को फेंक दिया गया था!मैंने सोचा कि यह पहले WinForms प्रश्न था :) –

+0

ditto :-) * खुद को ज्ञापन: टैग पढ़ें * –

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