Изменение цвета и шрифта для некоторой части текста в WPF C #

Есть ли способ изменить цвет и шрифт для некоторой части текста, которую я хочу разместить в TextBox или RichTextBox. Я использую C # WPF.

Например

richTextBox.AppendText("Text1 " + word + " Text2 "); 

Например, переменное слово может быть другим цветом и шрифтом из Text1 и Text2. Возможно ли и как это сделать?

Если вы просто хотите сделать некоторую быструю раскраску, использование конца содержимого RTB в качестве диапазона и применить форматирование к нему, возможно, это простое решение, например

  TextRange rangeOfText1 = new TextRange(richTextBox.Document.ContentEnd, richTextBox.Document.ContentEnd); rangeOfText1.Text = "Text1 "; rangeOfText1.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Blue); rangeOfText1.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Bold); TextRange rangeOfWord = new TextRange(richTextBox.Document.ContentEnd, richTextBox.Document.ContentEnd); rangeOfWord.Text = "word "; rangeOfWord.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Red); rangeOfWord.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Regular); TextRange rangeOfText2 = new TextRange(richTextBox.Document.ContentEnd, richTextBox.Document.ContentEnd); rangeOfText2.Text = "Text2 "; rangeOfText2.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Blue); rangeOfText2.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Bold); 

Если вы ищете более продвинутое решение, я предлагаю прочитать страницу MSDN о FlowDocument , так как это дает вам большую гибкость в форматировании текста.

Вы можете попробовать это.

 public TestWindow() { InitializeComponent(); this.paragraph = new Paragraph(); rich1.Document = new FlowDocument(paragraph); var from = "user1"; var text = "chat message goes here"; paragraph.Inlines.Add(new Bold(new Run(from + ": ")) { Foreground = Brushes.Red }); paragraph.Inlines.Add(text); paragraph.Inlines.Add(new LineBreak()); this.DataContext = this; } private Paragraph paragraph; 

Поэтому используйте свойство Document RichTextBox

Вам нужно использовать свойство Document RichTextBox и добавить к нему Run .

Свойство документа: http://msdn.microsoft.com/en-us/library/system.windows.controls.richtextbox.document.aspx
Запустить: http://msdn.microsoft.com/en-us/library/system.windows.documents.run.aspx

Я создал свой собственный class чтобы манипулировать TextBlock , TextBox

 ///  /// Class for text manipulation operations ///  public class TextManipulation { ///  /// Is manipulating a specific string inside of a TextPointer Range (TextBlock, TextBox...) ///  /// Starting point where to look /// Endpoint where to look /// This is the string you want to manipulate /// The new FontStyle /// The new FontWeight /// The new foreground /// The new background /// The new FontSize public static void FromTextPointer(TextPointer startPointer, TextPointer endPointer, string keyword, FontStyle fontStyle, FontWeight fontWeight, Brush foreground, Brush background, double fontSize) { FromTextPointer(startPointer, endPointer, keyword, fontStyle, fontWeight, foreground, background, fontSize, null); } ///  /// Is manipulating a specific string inside of a TextPointer Range (TextBlock, TextBox...) ///  /// Starting point where to look /// Endpoint where to look /// This is the string you want to manipulate /// The new FontStyle /// The new FontWeight /// The new foreground /// The new background /// The new FontSize /// The New String (if you want to replace, can be null) public static void FromTextPointer(TextPointer startPointer, TextPointer endPointer, string keyword, FontStyle fontStyle, FontWeight fontWeight, Brush foreground, Brush background, double fontSize, string newString) { if(startPointer == null)throw new ArgumentNullException(nameof(startPointer)); if(endPointer == null)throw new ArgumentNullException(nameof(endPointer)); if(string.IsNullOrEmpty(keyword))throw new ArgumentNullException(keyword); TextRange text = new TextRange(startPointer, endPointer); TextPointer current = text.Start.GetInsertionPosition(LogicalDirection.Forward); while (current != null) { string textInRun = current.GetTextInRun(LogicalDirection.Forward); if (!string.IsNullOrWhiteSpace(textInRun)) { int index = textInRun.IndexOf(keyword); if (index != -1) { TextPointer selectionStart = current.GetPositionAtOffset(index,LogicalDirection.Forward); TextPointer selectionEnd = selectionStart.GetPositionAtOffset(keyword.Length,LogicalDirection.Forward); TextRange selection = new TextRange(selectionStart, selectionEnd); if(!string.IsNullOrEmpty(newString)) selection.Text = newString; selection.ApplyPropertyValue(TextElement.FontSizeProperty, fontSize); selection.ApplyPropertyValue(TextElement.FontStyleProperty, fontStyle); selection.ApplyPropertyValue(TextElement.FontWeightProperty, fontWeight); selection.ApplyPropertyValue(TextElement.ForegroundProperty, foreground); selection.ApplyPropertyValue(TextElement.BackgroundProperty, background); } } current = current.GetNextContextPosition(LogicalDirection.Forward); } } } 

Применение

 TextManipulation.FromTextPointer(_TextBlock.ContentStart, _TextBlock.ContentEnd, "IWantToBeManipulated", NewFontStyle, NewFontWeight, NewForeground, NewBackground, NewFontSize); TextManipulation.FromTextPointer(_TextBlock.ContentStart, _TextBlock.ContentEnd, "IWantToBeManipulated", NewFontStyle, NewFontWeight, NewForeground, NewBackground, NewFontSize, "NewStringIfYouWant"); 
  • Неактивность и активность WPF
  • Получить значения из процесса StandardOutput
  • Как автоматически выбрать весь текст в фокусе в WPF TextBox?
  • Как отображать элементы в Canvas через Binding
  • Как сделать элементы WPF ListView повторяющимися по горизонтали, например, горизонтальной полосой прокрутки?
  • WPF C # Путь: как получить из строки с данными пути в геометрию в коде (не в XAML)
  • Как отобразить другое значение для выпадающего списка значений / выбранного элемента в WPF ComboBox?
  • Опции для встраивания Chromium вместо IE WebBrowser с WPF / C #
  • Вертикальный текст в Wpf TextBlock
  • Доступ к свойствам через параметр Generic type
  • ComboBox.SelectedValue не обновляется из источника привязки
  • Interesting Posts

    android custom url схема ..?

    JAVA – Лучший подход к анализу огромного (особо большого) файла JSON

    Как настроить Firefox абсолютно не удалять элементы истории?

    Есть ли Java API для файлов mp4?

    Использование профилей в Automapper для сопоставления одних и тех же типов с другой логикой

    Поиск в Windows 10 Start Menu не работает для новых приложений

    Как выразить отношения «один-ко-многим» в Django

    Лучший способ отображения данных через JSON с помощью jQuery

    Как периодически проверять подключение к Интернету в целом приложении?

    Пользовательское название с изображением

    Какова стандартная управляемая область Bean в приложении JSF 2?

    Как настроить время отображения уведомлений рабочего стола в Google Chrome?

    Идентификатор ASP.NET – несколько наборов объектов для каждого типа не поддерживаются

    Что делают одиночные кавычки в C ++ при использовании нескольких символов?

    Как вы регистрируете отчет об ошибках для Windows?

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