2016-08-30 1 views
1

J'utilise C# WPF avec Avalon Edit Text Box.WPF Avalon Editer Faire du texte en majuscule

Je suis en train de faire tout le texte dans la zone de texte en majuscules et je reçois une erreur avec un message supplémentaire "Aucun groupe undo devrait être ouvert à ce moment.

J'utilise le code suivant:

a.Text = a.Text.ToUpper(); 

où "a" est le AvalonEdit.TextEditor

Merci.

Répondre

1

La définition de la propriété TextEditor.Text a pour effet secondaire de supprimer la pile d'annulation (comme avec le WPF normal TextBox). L'effacement de la pile d'annulation n'est autorisé que s'il n'y a pas de groupe d'annulation ouvert.

Si vous ne l'avez pas l'intention d'effacer la pile d'annulation, utilisez les méthodes sur textEditor.Document au lieu de modifier le document. Vous voudrez éviter de remplacer le texte entier, car cela réinitialiserait également la position de la sélection et du curseur (après tout, AvalonEdit ne peut pas savoir comment votre nouveau texte est lié à l'ancien texte).

Si vous voulez effacer la pile undo (par exemple vous passez la vue à un autre document), vous aurez à comprendre pourquoi un groupe undo est ouvert. Très probablement, votre code est en cours d'exécution à partir du gestionnaire d'événements d'un événement qui est appelé alors que le groupe undo est encore ouvert (par exemple document.TextChanged) - vous pouvez passer à un autre événement au lieu (par exemple document.UpdateFinished est appelé après que le groupe undo a été fermé).

Si tout ce que vous voulez faire est de texte en majuscules comme il est entré, il est préférable de modifier le texte avant qu'il ne soit ajouté au document: gérer l'événement TextArea.TextEntering d'annuler toute entrée minuscule (set e.Handled = true;), et appelez à la place TextArea.PerformTextInput() pour répéter le processus de saisie de texte avec le texte en majuscule correspondant à la place.

Pour copier-coller, vous pouvez gérer ci-joint DataObject.PastingEvent et modifier les données à coller.