Défini le signe/la position du curseur à la fin de la chaîne de valeur WPF zone de texte
Je suis d'essayer de régler le curseur/la position du curseur à l' fin de la chaîne de valeur dans mon WPF zone de texte quand j'ouvre ma fenêtre pour la première fois. J'utilise la classe FocusManager pour définir le focus sur ma zone de texte lorsque ma fenêtre s'ouvre.
Rien ne semble fonctionner. Des idées?
Remarque, je suis en utilisant le pattern MVVM, et je l'ai inclus une partie seulement de la XAML de mon code.
<Window
FocusManager.FocusedElement="{Binding ElementName=NumberOfDigits}"
Height="400" Width="800">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBox Grid.Column="0" Grid.Row="0"
x:Name="NumberOfDigits"
IsReadOnly="{Binding Path=IsRunning, Mode=TwoWay}"
VerticalContentAlignment="Center"
Text="{Binding Path=Digits, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<Button Grid.Column="0" Grid.Row="1"
Margin="10,0,10,0"
IsDefault="True"
Content="Start"
Command="{Binding StartCommand}"/>
</Grid>
</Window>
Vous devez vous connecter pour publier un commentaire.
Vous pouvez définir la position du curseur à l'aide de
CaretIndex
propriété d'unTextBox
. S'il vous plaît garder à l'esprit que ce n'est pas unDependencyProperty
. Néanmoins, vous pouvez toujours définir dans le code XAML comme ceci:N'oubliez pas de définir
CaretIndex
aprèsText
propriété ou bien il ne fonctionnera pas. Ainsi, il ne sera probablement pas fonctionner si vous liez àText
comme dans votre exemple. Dans ce cas, utilisez simplement le code-behind de ce genre.Vous pouvez aussi créer un Comportement, qui, tout en gardant le code-behind, a l'avantage d'être réutilisable.
Exemple d'un simple comportement de la classe, à l'aide de l'accent cas de la zone de texte:
Puis, dans votre XAML, vous fixez le comportement de la sorte:
Cela a fonctionné pour moi. Je suis également en utilisant le pattern MVVM. Cependant, mon objectif pour l'utilisation d'un MMVM est de faire des tests unitaires possible et pour faciliter la mise à jour de mon INTERFACE (faiblement couplés). Je ne me vois pas de tests unitaires de la position du curseur de sorte que je n'ai pas l'esprit de recourir au code derrière cette simple tâche.
Si votre zone de texte (WinForms) est multiligne avec une barre de défilement verticale, vous pouvez essayer ceci:
Remarque: Dans WPF .ScrollToCaret() n'est pas membre de la zone de texte.
En cas de multiligne
TextBox
réglage du curseur n'est pas assez.Essayez ceci: