2009-10-17 8 views
4

Lors de la modification d'un texte, l'utilisateur peut utiliser le bouton de changement de clavier et les touches de direction pour modifier la sélection. En appuyant à gauche, il est possible d'obtenir la partie mobile à gauche de la partie ancrée. J'essaye de modifier dinamicalement la sélection des utilisateurs dans la TextBox de WPF (pour les besoins de la discussion, disons que je veux sélectionner les caractères par paires, par exemple en appuyant sur shift + left, 2 caractères seront sélectionnés, pas seulement un). Cependant, lors de l'utilisation de SelectionStart/SelectionIndex/CaretIndex/Select, la "fin de déplacement" de la sélection se termine toujours à l'extrême droite de la sélection, ce qui rend la combinaison shift + left inutile.WPF TextBox - sélectionne le texte par programmation tout en préservant la "direction de sélection"

Un moyen de préserver la "direction de sélection"?

Répondre

5

Ce n'est pas tout à fait la réponse que vous cherchez, mais ça va marcher. Appelez la commande et faites comme WPF le fait.

 EditingCommands.SelectLeftByCharacter.Execute(null, textBox1); 
0

La seule possibilité à laquelle je peux penser est de définir le SelectionStart, puis de rendre le SelectionLength négatif.

+0

Essayé déjà (semblait logique), mais il jette une exception. –

+0

De MSDN: "Lance ArgumentOutOfRangeException si SelectionLength est défini sur une valeur négative" ([lien] (https://msdn.microsoft.com/en-us/library/system.windows.controls.textbox.selectionlength (v = vs .110) .aspx)) –

2

Aucun de ces travaux. SelectionLength ne peut pas être négatif, et CaretIndex est toujours identique à SelectionStart. Ceci est un bug de conception dans TB, car vous ne pouvez pas atteindre un état valide même dans la portée protégée.

La commande fonctionne réellement, mais vous ne pouvez toujours pas déterminer la direction de la sélection de la zone de texte actuellement analysée. Il n'y a qu'une seule solution, qui est une solution de contournement laide: Vous pouvez écrire votre propre code d'observateur en remplaçant les gestionnaires d'événements de la souris et du clavier.

Questions connexes