WPF эквивалентен выбору Windows Forms длины 0

Я переделываю свое приложение Windows Forms в WPF, и у меня возникают проблемы с выбором Windows Forms и TextRange WPF. В Windows Forms я использовал Selection of Length 0 в RichTextBox, чтобы изменить цвет определенной позиции, чтобы, когда кто-то пишет, начиная с нее, он имел другой цвет, не изменяя цвет любого текста. Что-то вроде этого:

richTextBox.Select(position, 0);
richTextBox.SelectionColor = Color.Blue;

Проблема в том, что в WPF я не могу найти эквивалент. Если я использую TextRange длины 0, это ничего не делает. Вы знаете, что я могу сделать? Спасибо!


person Lisandro Acuña    schedule 10.05.2020    source источник


Ответы (1)


Вы можете попробовать этот подход. Это не хорошо, но это работает.

    Brush MyBrush = new SolidColorBrush(Colors.Black);
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        MyBrush = new SolidColorBrush(Colors.Red);
        MyRichTextBox.Focus();
    }

    private void MyRichTextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        var textBox = (RichTextBox)sender;
        var docStart = textBox.Document.ContentStart.DocumentStart;
        foreach (var change in e.Changes)
        {

            var changeStart = docStart.GetPositionAtOffset(change.Offset, LogicalDirection.Forward);
            var changeEnd = docStart.GetPositionAtOffset(change.Offset + change.AddedLength, LogicalDirection.Forward);
            var changedRange = new TextRange(changeStart, changeEnd);

            changedRange.ApplyPropertyValue(TextElement.ForegroundProperty, MyBrush);

        }
    }
person HYA    schedule 11.05.2020