2011-05-08 3 views
5

나는 XAML에 텍스트 상자를 가지고 :윈도우 폰 7 취급 백 스페이스에서 KeyDown 이벤트

<TextBox Text="blah" 
     Name="blah" 
     LostFocus="blah_OnLostFocus" 
     KeyDown="blah_OnKeyDown"/> 

.cs 파일은 다음과 같은 이벤트가 선언했다 :

private void blah_OnKeyDown(object sender, KeyEventArgs e) 
    { 
     TextBox t = sender as TextBox; 
     int i = 0; 
     if(e.Key == Key.Delete) 
      i = 1; 
    } 

나는 에뮬레이터 키보드의 백 스페이스 키를 누르면 이벤트는 무시됩니다. 다른 버튼을 누르면 트리거됩니다. 또한 KeyUp 이벤트에 대해 동일한 이벤트 본문을 사용하면 백 스페이스 키가이를 트리거합니다.

KeyDown 이벤트에서 백 스페이스 키를 눌렀을 때 어떻게 추적합니까? 백 스페이스 키를 눌러도 KeyDown 이벤트가 트리거되지 않는 이유는 무엇입니까?

감사합니다.

답변

6

에서 키 열거를 참조 Key.Back 오히려

Key.Delete보다 사용합니다. 컨트롤은 백 스페이스 이벤트를 취해 문자를 제거하고 이벤트에 이벤트를 버블 링하지 않습니다. 이는 의도적으로 설계된 동작입니다. 텍스트 상자에 글자가 없으면 이벤트가 버블 링된다는 것을 알 수 있습니다. 이 문제를 해결하려면 AddHandler을 사용하여 이벤트를 처리 할 수 ​​있습니다. 텍스트 상자가 있어야

private void blah_OnKeyDown(object sender, KeyEventArgs e) 
{ 
    TextBox t = sender as TextBox; 
    int i = 0; 
    if(e.Key == Key.Back) 
      i = 1; 
} 

내부 이벤트를 처리 할뿐만 아니라 당신의 onKeyDown에 이벤트를 호출

//Handle the mainpage loaded event and add the handler to the textbox 
void MainPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    textBox1.AddHandler(TextBox.KeyDownEvent, new KeyEventHandler(blah_KeyDown), true); 
} 

그런 다음이에 KEY_DOWN 이벤트 핸들러를 변경 :이 일을보십시오.

+0

이 답변의 연장으로 Silverlght 포럼의이 게시물을 참조하십시오. http://forums.silverlight.net/forums/p/83981/217568.aspx – Stuart

+0

이 작업은 textBox1.AddHandler ... 문을 사용하기 만하면됩니다. 페이지 생성자에 전달했지만 이벤트는 두 번 트리거 된 것처럼 보였습니다. 텍스트 상자가 비어 있지 않으면 backspace 키에 관한 흥미로운 정보를 보내 주셔서 감사합니다. 그 동작이 마음에 들었습니다. 여전히 각 백 스페이스 키를 제어해야하는 사람들을 위해 KeyUp 이벤트는 그 목적을 위해 잘 작동합니다. – Eugene

관련 문제