2017-11-15 3 views
0

Gibt es eine Möglichkeit, den Backspace-Schlüssel mit einem KeyDownEvent in UWP abzubrechen? Dieses Ereignis verwendet KeyRoutedEventArgs, daher gibt es keine SuppressKeyPress Funktion.UWP KeyRoutedEventArgs.handled löscht Backspace-Schlüssel nicht

event.Handled = true hilft nicht; es stoppt nur, dass das Ereignis mehrmals hintereinander vom selben Tastendruck aus aufgerufen wird.

Gibt es eine solche Funktion?

+0

e.Handled = true funktionieren sollte, muss es etwas anderes, das Problem verursacht, können Sie bitte posten vollständigen Code für weitere Hilfe –

Antwort

4

Wenn Sie einen Text haben wie folgt definiert:

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

Und im KeyDown-Ereignis, wenn Sie setzen gerade bearbeiteter = true jedes Mal, kann der Benutzer nicht geben alles:

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

Aber wie Sie erwähnt haben, wenn Sie nach Back-Key suchen und Handled = true setzen, funktioniert es nicht: Der Benutzer kann immer noch Backspace verwenden. Das funktioniert also nicht.

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

Wenn Sie den Code debuggen, können Sie sehen, dass das Zeichen bereits verschwunden ist, wenn der Eventhandler ausgeführt wird. Sie müssen dies umgehen und andere Ereignisse verwenden. Hier ist eine Option:

XAML:

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

-Code hinter:

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

Das hat gut funktioniert. Vielen Dank. Gibt es jedoch eine Möglichkeit, die Cursorposition zu speichern? Ich habe versucht, eine Auswahl geänderte Funktion und eine neue Variable ähnlich der Art, wie Sie 'currentText' einrichten, aber es immer wieder zurückgeschnappt. – Orion31