2017-11-15 15 views
0

UWP에서 KeyDownEvent으로 백 스페이스 키를 취소 할 수 있습니까? 이 이벤트는 KeyRoutedEventArgs을 사용하므로 SuppressKeyPress 기능이 없습니다.UWP KeyRoutedEventArgs.handled가 백 스페이스 키를 취소하지 않음

event.Handled = true 도움이되지 않습니다. 동일한 키 누름에서 이벤트가 여러 번 빠르게 연속적으로 멈추는 것을 멈 춥니 다.

이러한 기능이 있습니까? 이 같은 정의 된 텍스트 상자가있는 경우

+0

e.Handled = 당신을위한 전체 코드를 게시하시기 바랍니다 수 있습니다, 뭔가 다른 문제를 일으키는 작업을해야 진실이 있어야합니다 추가 도움이 –

답변

4

:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <TextBox KeyDown="TextBox_KeyDown"/> 
</Grid> 

그리고에서 KeyDown 이벤트에서

것은 당신이 단지마다 = 진정한 취급 설정하면, 사용자가 입력 할 수있는 일 :

private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e) 
    { 
     e.Handled = true; 
    } 

그러나 앞에서 언급 한 것처럼 Back 키를 확인하고 Handled = true로 설정하면 작동하지 않습니다. 사용자는 여전히 백 스페이스를 사용할 수 있습니다. 그래서 이것은 효과가 없습니다.

private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e) 
    { 
     if (e.Key == Windows.System.VirtualKey.Back) 
     { 
      e.Handled = true; 
      return; 
     } 
    } 

코드를 디버깅하면 이벤트 핸들러가 실행될 때 문자가 이미 사라짐을 알 수 있습니다. 다른 이벤트를 사용하여이 문제를 해결해야합니다. 여기에 하나 개의 옵션이다 :

XAML :

<TextBox KeyDown="TextBox_KeyDown" KeyUp="TextBox_KeyUp"/> 

코드 숨김

private string currentText; 
    private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e) 
    { 
     if (e.Key == Windows.System.VirtualKey.Back) 
     { 
      if (string.IsNullOrWhiteSpace(currentText)) 
       return; 

      ((TextBox)sender).Text = currentText; 
      ((TextBox)sender).SelectionStart = currentText.Length; 
      ((TextBox)sender).SelectionLength = 0; 
     } 
    } 

    private void TextBox_KeyUp(object sender, KeyRoutedEventArgs e) 
    { 
     currentText = ((TextBox)sender).Text; 
    } 
+0

잘 작동했습니다. 감사. 그러나 커서 위치를 저장하는 방법이 있습니까? 당신이'currentText'를 설정하는 것과 비슷한 선택 변수와 새로운 변수를 추가하려고 시도했지만, 항상 되돌아갔습니다. – Orion31