WPF: DataGrid comment puis-je entrée de texte multi-ligne
les gars
Je veux d'entrée de texte multi-ligne dans un DataGridTextColumn, je peux utiliser "enter" à l'entrée d'un multi-ligne de caractères. Mais je veux utiliser "maj+entrée", tels que visual studio gestionnaire de ressources, voici mon code avec la touche "entrée".
<DataGridTextColumn Header="Value" Binding="{Binding Value}" Width="*">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="TextWrapping" Value="Wrap" />
</Style>
</DataGridTextColumn.ElementStyle>
<DataGridTextColumn.EditingElementStyle>
<Style TargetType="TextBox">
<Setter Property="TextWrapping" Value="Wrap" />
<Setter Property="AcceptsReturn" Value="true" />
</Style>
</DataGridTextColumn.EditingElementStyle>
OriginalL'auteur yafeya | 2011-02-11
Vous devez vous connecter pour publier un commentaire.
Une façon de le faire est par la manipulation de l'événement KeyDown sur la zone de texte à l'aide d'un EventSetter dans votre Style. J'ai pris ton exemple, a supprimé la AcceptsReturn setter dans le style, et a ajouté un KeyDown gestionnaire à l'EditingElementStyle qui ajoute un saut de ligne à l'endroit où le curseur est sur place et déplace les CaretIndex vers la droite.
Voici le code XAML:
J'ai écrit l'exemple de la classe de Fenêtre à partir d'un nouveau modèle de projet d'Application, voici donc le C# pour l'ensemble de la Fenêtre avec le code de gestion des événements. Note que j'ai mis Traitées à true pour arrêter l'évènement de remonter n'importe où car je ne veux pas la touche Retour pour être traité comme une validation à l'édition de la ligne dans ce cas. Je pense que c'est effectivement l'un des inconvénients de l'approche. L'arrêt de la formation de bulles/tunnels d'un événement est quelque chose qui, si vous avez des interactions complexes avec la saisie de l'utilisateur dans votre application, vous pouvez facilement devenir une bombe à retardement. Mais il n'est pas si mauvais si vous avez juste un cas particulier de ce genre. Donc, comme avec tout, utiliser avec prudence, car la partie de l'INTERFACE utilisateur à l'aide de cette pousse.
Une autre chose à considérer est que vous pouvez vouloir que le comportement sera différent si l'insertion de la clé a été enfoncé et que vous êtes à remplacer le mode de saisie. Peut-être que dans ce cas, le caractère suivant doit être remplacé par la nouvelle ligne. Mais l'éditeur de ressources de Visual Studio 2010 ne semble pas réagir à la touche insert (il également ne pas afficher le texte multi-ligne). Mais je pense que compte tenu de cet exemple, vous pouvez l'étendre à bien travailler avec la touche inser. Espérons que cela aide - bonne chance!
L'héritage est agréable car il vous permet de proprement encapsuler ce au prix de bifurquant de la zone de texte dans le type de graphique. Une autre façon d'encapsuler cet événement manipulation sans mettre un nouveau nœud dans le type d'arbre que vous voulez vérifier si vous avez besoin d' (seulement le rendre aussi complexe que vous le souhaitez bien sûr) est à l'aide d'une propriété attachée à ajouter le comportement et l'utilisation d'une propriété a changé de gestionnaire pour votre propriété pour faire de l'événement abonnez-vous/un-indice. Le truc cool, c'est que cette logique sera réutilisable dans plus que juste la zone de texte (comme d'autres dérivés de contrôle). Meilleurs vœux.
Oui, cela peut m'offrir quelque moyen simple d'étendre la logique de la zone de texte, ce qui est très bien.
OriginalL'auteur timmyl
Ensemble TextWrapping pour Envelopper et AcceptsReturn = True...
OriginalL'auteur blins