Andre Dieme Ответов: 1

Цвет Rich textbox для нового ввода (WPF, C#)


Я хочу изменить цвет моего богатого текстового поля для нового ввода. Текстовое поле загружает текст при запуске. Я хочу контролировать, чтобы новый пользовательский ввод по-прежнему выделялся, например, красным цветом или желтым фоном. Новый текст может быть добавлен в любом месте, а не только в конце. Если бы это было только в конце, я мог бы легко добавить туда красную букву.

Проблема заключается в том, что пользователь должен отредактировать текст, и изменения должны быть выделены.

Мой код :
Программа C#
string RTF = @"{\rtf1\ansi\deff0 " +
@"{\colortbl;\red0\green0\blue0;\red255\green0\blue0;} "+
@"line1 \line "+
@"\cf2 "+
@"line 2 \line "+
@"\cf1 "+
@"line 3 "+
@"}";

MemoryStream stream = new MemoryStream(ASCIIEncoding.Default.GetBytes(RTF));
TextRange range = new TextRange(demo.Document.ContentStart, demo.Document.ContentEnd);
range.Load(stream, DataFormats.Rtf);

код XAML
<RichTextBox HorizontalAlignment="Left" Height="116" Margin="37,266,0,0" Grid.Row="1" x:Name="demo" VerticalAlignment="Top" Width="381">
         
        </RichTextBox>


Что я уже пробовал:

Я уже добавил RichTextBoxFormatBar из расширенного инструментария WPF. Он позволяет пользователю форматировать содержимое, но я не нашел решения для установки цвета по умолчанию для нового ввода.

0x01AA

Может быть, начало, но не очень хорошее, я думаю, еще один взлом. И много вещей, которые должны быть исправлены:
private void RichTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
rtb.Selection.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Red);
}

Andre Dieme

Большое спасибо! Он отлично работает.
Я немного изменил код, потому что этот метод можно было применить ко всем текстовым полям Richt.

частная RichTextBox_TextChanged недействительным(объект отправителя, TextChangedEventArgs е)
{
RichTextBox x = (RichTextBox)отправитель;
x.выбор.ApplyPropertyValue(Объект Textelement.ForegroundProperty, Brushes. Red);
}

1 Ответов

Рейтинг:
1

Bhola Ram Sahu

Вы можете сравнить как заданный текст, так и новый входной текст.

Если какое-либо несоответствие найдено, то отформатируйте его.


string oldText = " что угодно";
строку "текст" = rtbGivenText.Текст;

for (int i = 0; i < oldText. Length; i++)
{
if (oldText[i]==newText[i])
{
rtbGivenText. Select(i, i+1);
rtbGivenText.SelectionColor = Цвет.Красный;
}
}