답변:
class를 사용하십시오 Keyboard
. 사용 Keyboard.IsKeyDown
제어, 시프트 경우 확인할 수 있습니다 Alt 키 지금 다운.
Shift의 경우 :
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
명령문을 사용하십시오 . Shift 키를 잡고 싶지만 동시에 다른 수정자를 눌렀는지 신경 쓰지 않으려면 (Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift
HasFlag 구문을 사용하십시오.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.Key가 아닌 e.SystemKey를 사용해야하는 이유를 알 수 있습니까? 그러나 이것은 modifier + key를 검색 할 때 완벽하게 작동했습니다.
@Josh에서 부분 차용하고 @Krushik과 다소 비슷하며 KeyEventArgs.systemKey와 KeyEventArgs.Key 의 차이점 에 대한 질문을 참조 합니다 (Josh가 왜 SystemKey를 사용해야하는지에 대한 대답). 여기서 수정 자 키 (예 : Alt)를 사용하는 경우 e.Key는 Key.System을 반환하므로 '실제'키는 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)
다른 모든 항목 대신 확인할 수 있습니다 .