2010-12-03 4 views
7

ElementHost 내부에서 WPF 컨트롤 (Avalon Edit 중요)을 사용하는 Winforms 응용 프로그램이 있습니다.Winform의 WPF 이벤트

잘 작동하는 것 같아요,하지만 Winforms 방식으로 (RoutedCommands 및 InputGestures 않고)이 컨트롤의 KeyPress 이벤트를 처리 할 수 ​​싶습니다, 그래서 그냥 KeyPreview 함께 폼의 KeyDown 이벤트를 처리 할 수 ​​Set WPF 이벤트는 폼에 버블 링되지 않는 것처럼 보입니다.

그래서 기본적으로 Winforms 방식으로 WPF 컨트롤에서 KeyDown 이벤트에 액세스 할 수 있습니까?

답변

6

WinForm의 KeyDown에 연결하는 대신 WpfControl 자체에 대한 사용자 지정 이벤트 처리기를 추가 할 수 있습니다.

여기 예입니다. 예를 들어 WinForm의 유형이 Form1이고 WpfControl이 UserControl1이고 WpfControl의 요소 호스트가 호출됩니다 (추측하지 않습니다). - elementHost.

public Form1() 
{ 
    InitializeComponent(); 
    elementHost.ChildChanged += ElementHost_ChildChanged; 
} 

private void ElementHost_ChildChanged(object sender, ChildChangedEventArgs e) 
{ 
    var ctr = (elementHost.Child as UserControl1); 
    if (ctr == null) 
     return; 
    ctr.KeyDown += ctr_KeyDown; 
} 

void ctr_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) 
{ 
    /* your custom handling for key-presses */ 
} 

UPD : e.KeyboardDevice.Modifiers (e는 System.Windows.Input.KeyEventArgs이다) 등 Ctrl 키, Alt 키,에 대한 정보를 저장

문제는 System.Windows.Input.KeyEventArgs 실제로 수식 키를 노출시키지 않는다는 것입니다
+0

, 당신은 할 수 있습니다 'Ctrl + Z', 'Z'또는 'Ctrl'만 확인하십시오. Key 속성조차도 내가 본 것의 modifier와 key의 bitwise 조합이 아니며 단지 눌린 메인 키일뿐입니다. – Miguel

+0

@Miguel, 업데이트보기 : e.KeyboardDevice.Modifiers가 필요합니다. –

+0

오, 고마워, 나는 결코 그걸 해결하지 못했을거야. Upvoted. – Miguel