2010-03-10 6 views
5

나는 follwing을 코드 (작동하지 않는) 한 :WPF 바로 가기 키 -이 기능이 작동하지 않는 이유는 무엇입니까?

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)) 

은 결코 사실로 평가되지 않습니다. 내 비슷한 이벤트 대신 Alt 대신이 방법으로 작동합니다. 또한 이 포함 된 내 이벤트는 뿐입니다. 아래 그림과 같이

+0

이벤트 자체가 실행되지 않습니까? 아니면 조건부로 사실이 아닌 것으로 판단되는 조건입니까? –

+0

Opps! 내 질문을 고칠 수 있습니다. 감사! – Justin

+0

WPF 앱이 아닙니까? WPF 3.5 KeyEventArgs에는 어떤 이벤트/소스가 있습니까? –

답변

3

WPF에서 키로 작업하는 더 좋은 방법은 Key Gestures

예 : 음이 아닌 솔루션

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

이 있지만, 당신이 그것을 충분히 쉽게 작업 할거야 그것에 더있다, 예입니다. WPF 방식으로 키를 처리 할 수 ​​있습니다!

PK의 :-) MSDN이 우리에게 예를 제공

+0

나는 KeyBinding에 대해 조금 읽었지만 keyevent를 사용하는 것보다 더 나은 이유는 무엇입니까? – Justin

+1

전체 솔루션은 ApplicationCommands 등과 함께 사용해야합니다. 또한 명령 등을 추상화 할 수 있습니다. 약간은 있지만 실제로 발생하는 사건 때문에 원래의 작업 방식을 얻지 못할 것이라고 생각합니다. –

+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

당신합니다 ... e 매개 변수의 Handled 속성을 설정하는 것을 잊지 마세요,

 
    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; 
     } 
    } 

또한 ... ModifierKeys과 함께 '비트와'할 필요가

+0

실수로 응용 프로그램에서 사용하고있는 Keyboard.Modifiers 대신 예제 코드에서 e.Modifiers를 사용했습니다. 사과드립니다. Keyboard.Modifiers를 사용하여 예제를 사용할 수 없었습니다. – Justin

+0

실제로 작동시키지 못합니까? –

0

:

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

당신을 위해이 작업을 수행을?

+0

Paul Kohler가 말했듯이 "WPF 3.5 KeyEventArgs에는 수정 자 속성이 없습니다."예제 코드에서 e.Modifiers를 실수로 사용했습니다. 혼란에 대해 사과드립니다. – Justin

+0

나는 우리 중 몇 명이 그것에 의해 던져 졌다고 생각한다!나는 그것이 처음에 WinForms 질문이라고 생각했다. –

+0

ditto :-) * 자신에게 메모 : 태그 읽기 * –

관련 문제