代码之家  ›  专栏  ›  技术社区  ›  Matthew Knudsen

突出显示WPF文本块中的文本

  •  3
  • Matthew Knudsen  · 技术社区  · 10 年前

    我试图突出显示或设置WPF文本块中某些选定文本的背景。 假设我有两个文本文件加载到内存中,完成一个diff,然后想在WPF应用程序中播放。想象一下,循环遍历每一行,然后将文本附加到文本块,并根据已删除、插入或相等的文本更改颜色。

    for (int i = 0; i < theDiffs.Count; i++)
            {
                switch (theDiffs[i].operation)
                {
                    case Operation.DELETE:
                        // set color to red on Source control version TextBlock
                        break;
    
                    case Operation.INSERT:
                        WorkspaceVersion.AppendText(theDiffs[i].text);
                        // set the background color (or highlight) of appended text to green
                        break;
    
                    case Operation.EQUAL:
                        WorkspaceVersion.AppendText(theDiffs[i].text);
                        // Set the background color (highlight) of appended text to yellow
                        break;
    
                    default:
                        throw new ArgumentOutOfRangeException();
                }
            }
    
    1 回复  |  直到 10 年前
        1
  •  5
  •   McGarnagle    10 年前

    您需要追加 Run 内联元素 TextBlock Inlines 例如(假设“WorkspaceVersion”是文本块):

    case Operation.INSERT:
        // set the background color (or highlight) of appended text to green
        string text = theDiffs[i].text;
        Brush background = Brushes.Green;
        var run = new Run { Text = text, Background = background };
        WorkspaceVersion.Inlines.Add(run);
    break;