Установите позицию курсора / курсора в конец текстового поля WPF с строковым значением

Я пытаюсь установить позицию курсора / курсора в конце строкового значения в текстовом поле WPF, когда я открываю свое окно в первый раз. Я использую FocusManager, чтобы настроить фокус на моем текстовом поле, когда откроется мое окно.

Ничто не работает. Есть идеи?

Обратите внимание: я использую шаблон MVVM, и я включил только часть XAML из моего кода.

          

    Вы можете установить позицию каретки, используя свойство CaretIndex TextBox . Пожалуйста, имейте в виду, что это не DependencyProperty . Тем не менее вы все равно можете установить его в XAML следующим образом:

      

    Не забудьте установить CaretIndex после свойства Text иначе это не сработает. Таким образом, вероятно, это не сработает, если вы привяжетесь к Text как в вашем примере. В этом случае просто используйте такой код.

     NumberOfDigits.CaretIndex = NumberOfDigits.Text.Length; 

    Вы также можете создать Поведение, которое, сохраняя при этом код, имеет то преимущество, что оно может использоваться повторно.

    Пример простого classа поведения с использованием события фокуса текстового поля:

     class PutCursorAtEndTextBoxBehavior: Behavior { private TextBox _textBox; protected override void OnAttached() { base.OnAttached(); _textBox = AssociatedObject as TextBox; if (_textBox == null) { return; } _textBox.GotFocus += TextBoxGotFocus; } protected override void OnDetaching() { if (_textBox == null) { return; } _textBox.GotFocus -= TextBoxGotFocus; base.OnDetaching(); } private void TextBoxGotFocus(object sender, RoutedEventArgs routedEventArgs) { _textBox.CaretIndex = _textBox.Text.Length; } } 

    Затем в вашем XAML вы присоединяете поведение так:

           

    Если ваше текстовое поле (WinForms) является многострочным с вертикальной полосой прокрутки, вы можете попробовать следующее:

     textbox1.Select(textbox1.Text.Length-1, 1); textbox1.ScrollToCaret(); 

    Примечание. В WPF .ScrollToCaret () не является членом TextBox.

    Это сработало для меня. Я также использую шаблон MVVM. Тем не менее, моя цель использования MMVM заключается в том, чтобы сделать модульное тестирование возможным и упростить обновление моего интерфейса (слабо связанного). Я не вижу, чтобы я тестировал позицию курсора, поэтому я не против прибегать к коду, стоящему за этой простой задачей.

      public ExpeditingLogView() { InitializeComponent(); this.Loaded += (sender, args) => { Description.CaretIndex = Description.Text.Length; Description.ScrollToEnd(); Description.Focus(); }; } 

    В случае многострочного курсора установки TextBox недостаточно. Попробуй это:

     NumberOfDigits.ScrollToEnd(); 
    Interesting Posts

    CSS3 attr () не работает в основных браузерах

    Отправить опцию / Alt нажать на OS X, подключенную из Windows через VNC?

    Почему «не найти», как мне кажется, это нужно?

    Неожиданная ошибка оператора

    ASP.NET: этот метод не может быть вызван во время этапа инициализации перед запуском приложения

    Стиль кодирования / компоновщика C ++

    Является ли LUKS / cryptsetup `hddname` (или` name`) просто произвольной меткой, используемой во время сеанса

    Только несколько экземпляров только для виджетов Обновление последнего виджета

    Является ли указатель с правильным адресом и типом все еще всегда действительным указателем с C ++ 17?

    Различия между IQueryable, List, IEnumerator?

    Двойная изогнутая форма

    Можно ли использовать 3,5-миллиметровый разделитель наушников для объединения двух входов в один выход?

    Загрузочный стол

    Как искать и заменять строку в нескольких текстовых файлах (внутри каталога) с помощью Windows CMD? Часть 2

    Коллекция карт JPA из Enums

    Давайте будем гением компьютера.