जवाबों:
कक्षा का उपयोग करें Keyboard
। Keyboard.IsKeyDown
अगर आप कंट्रोल, शिफ्ट, ऑल्ट को डाउन कर रहे हैं तो आप इसका उपयोग कर सकते हैं।
शिफ्ट के लिए:
if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
{ /* Your code */ }
नियंत्रण के लिए:
if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{ /* Your code */ }
Alt के लिए:
if (Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))
{ /* Your code */ }
वहाँ भी:
// Have to get this value before opening a dialog, or user will have released the control key
if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
}
Keyboard.Modifiers == ModifierKeys.Shift
कथन का उपयोग करें । यदि आप शिफ्ट कुंजी को पकड़ना चाहते हैं, लेकिन यह ध्यान नहीं रखते हैं कि यदि अन्य संशोधक एक ही समय में दबाए जाते हैं, तो (Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift
या तो बेहतर हैफ्लैग सिंटैक्स का उपयोग करेंKeyboard.Modifiers.HasFlag(ModifierKeys.Shift)
WIN+RightArrow
।
Keyboard.Modifiers
रूप में दिखाता हैNone
private bool IsShiftKey { get; set; }
private void OnPreviewKeyDown(object sender, KeyEventArgs e)
{
IsShiftKey = Keyboard.Modifiers == ModifierKeys.Shift ? true : false;
if ((Key.Oem3 == e.Key || ((IsShiftKey && Key.Oem4 == e.Key) || (IsShiftKey && Key.Oem6 == e.Key) || (IsShiftKey && Key.Oem5 == e.Key)) && (validatorDefn as FormatValidatorDefinition).format == "packedascii"))
{
e.Handled = true;
}
}
यह है कि मैं इसे कैसे प्रबंधित करता हूं (PreviewKeyDown का उपयोग करके), मान लें कि हम Alt + R की तलाश कर रहे हैं ...
private void OnPreviewKeyDown(object sender, KeyEventArgs e)
{
if ((Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt)
&& e.SystemKey == Key.R)
{
//do whatever
}
}
शायद कोई यह स्पष्ट कर सकता है कि मुझे e.SystemKey का उपयोग करना था और न कि e.Key, शायद संशोधक के कारण? लेकिन यह मेरे लिए त्रुटिपूर्ण रूप से काम करता है जब मैं संशोधक + कुंजी खोजता हूं।
आंशिक रूप से @Josh से उधार लेना, और कुछ हद तक @Krushik के समान है, और KeyEventArgs.systemKey और KeyEventArgs.Key के बीच अंतर के बारे में एक प्रश्न का उत्तर देना (उत्तर देने के लिए जोश को SystemKey का उपयोग क्यों करना है); जिसमें, संशोधक कुंजी (जैसे कि Alt) के साथ, e.Key Key.System को लौटाता है, और इस प्रकार 'real' कुंजी e.SystemKey के भीतर है।
इसके आसपास एक तरीका है, पहले 'वास्तविक' कुंजी लाना, और फिर अपनी सशर्त करना:
private void OnPreviewKeyDown(object sender, KeyEventArgs e)
{
// Fetch the real key.
var key = e.Key == Key.System ? e.SystemKey : e.Key;
if ((Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))
&& key == Key.Return)
{
// Execute your code.
}
}
(e.Key == Key.F && e.KeyboardDevice.Modifiers == ModifierKeys.Control)
अन्य सभी सामानों के बदले बस चेक कर सकते हैं ...