如何更改文本块中特定单词的前景?

时间:2015-02-16 11:50:55

标签: c# wpf xaml

我有一个用户看到堆栈跟踪的文本块,如下所示:

  

System.ArgOutOfRangeExc。:   争论超出范围。
  Parametername:index
  在System.Collections.ArrayList.getItem(Int32索引)
      // ...
      at SomethingElse.formData.formData_CloseForm(Object sender,FormClosingEventArgs e)

这个想法是,像#34;系统......"得到灰色和堆栈跟踪的其余部分(这里:"在SomethingElse ....")不应该着色。

我不知道如何以及从何处开始以及如何管理此问题。有解决方案吗我正在使用C#和WPF

编辑:文本框中的文本不是静态的。每次用户单击DataGrid中的行时,文本都会更改,因此我需要以编程方式执行此操作(使用Substring将变得非常复杂)

1 个答案:

答案 0 :(得分:4)

您可以在TextBlock内使用多个Run元素。每个Run都可以拥有自己的格式。举个简单的例子:

<TextBlock FontSize="14" Margin="20">
    <Run Text="This is Green," Foreground="Green" />
    <Run Text="this is Red" Foreground="Red" />
    <Run Text="and this is Blue AND Bold" Foreground="Blue" FontWeight="Bold" />
</TextBlock>

enter image description here

请注意,Run.Text属性为DependencyProperty,因此您还可以绑定其值。这也可以通过编程方式完成:

<TextBlock Name="TextBlock" FontSize="14" Margin="20" />

...

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    Run run = new Run("This is Green,");
    run.Foreground = Brushes.Green;
    TextBlock.Inlines.Add(run);
    run = new Run(" this is Red");
    run.Foreground = Brushes.Red;
    TextBlock.Inlines.Add(run);
    run = new Run(" and this is Blue AND Bold");
    run.Foreground = Brushes.Blue;
    run.FontWeight = FontWeights.Bold;
    TextBlock.Inlines.Add(run);
}