1. ホーム
  2. wpf

[解決済み] WPFテキストボックスの文字列値の末尾にカーソル位置を設定する

2023-05-15 23:27:01

質問

カーソルの位置を に設定しようとしています。 に設定しようとしています。 私は、ウィンドウが開いたときにテキストボックスにフォーカスを設定するためにFocusManagerを使用しています。

何も動作しないようです。 何かアイデアはありますか?

注:私はMVVMパターンを使用しており、私のコードからXAMLの一部だけを含んでいます。

<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>

どのように解決するのですか?

キャレットの位置を設定するには CaretIndex プロパティで設定できます。 TextBox . このことは覚えておいてください。 DependencyProperty . それでも、XAMLでこのように設定することができます。

<TextBox Text="123" CaretIndex="{x:Static System:Int32.MaxValue}" />

を忘れずに設定してください。 CaretIndex の後に Text プロパティを指定しないと動作しません。したがって、おそらく Text にバインドした場合は、おそらく動作しないでしょう。その場合は、単純に以下のようにcode-behindを使用します。

NumberOfDigits.CaretIndex = NumberOfDigits.Text.Length;