Есть ли шанс вызвать событие, когда каретка TextBox изменилась? - PullRequest
1 голос
/ 30 декабря 2011

Мне нужно вызвать метод, когда TextBox изменяется, но TextBox.Caret не является DependencyProperty, и из-за этого нет возможности связать его.Как узнать, когда изменяется положение каретки?

Ответы [ 2 ]

3 голосов
/ 30 декабря 2011

Вы можете попытаться обработать SelectionChanged событие TextBox.

В XAML вы определяете текстовое поле следующим образом:

<TextBox x:Name="myTextBox" SelectionChanged="TextBox_SelectionChanged" />

Далее вы пишете метод обработки изменения курсора:

private void TextBox_SelectionChanged(object sender, RoutedEventArgs e)
{
    int caretPosition = myTextBox.CaretIndex;

    //put your handling code here...
}

Он срабатывает при каждом изменении каретки, поэтому при получении фокуса, при перемещении курсора с помощью клавиш со стрелками, при изменении положения курсора с помощью мыши и т. Д.

Если вам нужно такое поведение в нескольких текстовых полях, вы также можете просто создать свои собственные классы на основе TextBox и аналогичным образом создать собственное событие.

Я протестировал это в проекте WPF, но он должен работать и в проекте Silverlight.

0 голосов
/ 20 июля 2017

Хотя принятый ответ является фактически правильным, обратите внимание, что CaretIndex не изменится, если, например, у вас есть одна буква, и вы выбираете ее слева направо: вы ожидаете, что CaretIndex будет иметьзначение 1, но вы обнаружите, что оно имеет значение 0.

...