在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); 

如果您正在寻找更高级的解决方案,我建议您阅读有关FlowDocument的MSDN页面,因为这为您提供了格式化文本的极大灵活性。

你可以尝试一下。

 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; 

因此,请使用RichTextBox的Document属性

您需要使用RichTextBoxDocument属性并向其添加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 TextTextBox ……

 ///  /// 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");