2009-08-23 10 views
6

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

उत्तर

5

आप XAML में ऐसा कर सकते हैं - KeyBinding वर्ग के लिए दस्तावेज में उदाहरण देखें:

<Window.InputBindings> 
    <KeyBinding Command="ApplicationCommands.Open" 
       Gesture="CTRL+R" /> 
</Window.InputBindings> 

अद्यतन: ऐसा लगता है कि आप वास्तव में सिर्फ XAML का उपयोग कर एक ViewModel करने के लिए एक कीबाइंडिंग को नहीं बांध सकता है अगर आप ' MVVM का उपयोग कर रहे: यहाँ Keybinding a RelayCommand देखते हैं।

+1

दबाया जाता है आप XAML बजाय MXML मतलब है के सभी विवरण मिल सकता है? मुझे लगता है कि एमएक्सएमएल फ्लेक्स के लिए है। – Andy

+1

ओह, हाँ मैं करता हूँ! मेरे सिर में बहुत सारी तकनीकें! फिक्स्ड, धन्यवाद। – Grokys

7

CommandManager सभी इनपुट बाइंडिंग रूट करने के लिए प्रारंभिक बिंदु के रूप केंद्रित नियंत्रण का उपयोग करना चाहता है।

मैंने एक व्यवहार लिखा है जो आपको रूटेड कॉमांड (मानक डब्ल्यूपीएफ) और आईसीओएमएंड (एमवीवीएम-शैली) का उपयोग करके किसी भी नियंत्रण के लिए आसानी से वैश्विक शॉर्टकट कुंजियों को बांधने की अनुमति देता है।

WPF Behavior: Global Application Shortcut Keys

+0

हाय, डाउनलोड लिंक काम नहीं कर रहा है। क्या आप इसे कार्य लिंक के साथ अपडेट कर सकते हैं? – Elangesh

3

WPF में आदेश शॉर्टकट का उपयोग करने में आप संबंधित नियंत्रक ध्यान केंद्रित करने की जरूरत है। InputManager साथ हालांकि आप अपने आवेदन के आदानों के सभी प्रकार पर कब्जा कर सकते हैं। यहां आपको संबंधित नियंत्रक पर ध्यान केंद्रित करने की आवश्यकता नहीं है।

सबसे पहले आपको ईवेंट को सब्सक्राइब करना होगा।

InputManager.Current.PreProcessInput -= Current_PreProcessInput; 
InputManager.Current.PreProcessInput += Current_PreProcessInput; 

फिर,

private void Current_PreProcessInput(object sender, PreProcessInputEventArgs args) 
    { 
     try 
     { 
      if (args != null && args.StagingItem != null && args.StagingItem.Input != null) 
      { 
       InputEventArgs inputEvent = args.StagingItem.Input; 

       if (inputEvent is KeyboardEventArgs) 
       { 
        KeyboardEventArgs k = inputEvent as KeyboardEventArgs; 
        RoutedEvent r = k.RoutedEvent; 
        KeyEventArgs keyEvent = k as KeyEventArgs; 

        if (r == Keyboard.KeyDownEvent) 
        { 
        } 

        if (r == Keyboard.KeyUpEvent) 
        { 
        } 
       } 
      } 
     } 
     catch (Exception ex) 
     { 

     } 
    } 

इस तरह आप सभी अवांछित सामान को फ़िल्टर और आवश्यक इनपुट प्राप्त कर सकते हैं। चूंकि यह एक शॉर्टकट पर कब्जा करने के लिए आवेदन है मैं केवल KeyDown और KeyUp घटना ले लिया।

तुम भी कुंजी जो

keyEvent.Key.ToString()