WPF,richtextbox高亮文本

时间:2015-08-18 21:46:17

标签: c# wpf richtextbox highlight

我将有关排序算法更改位置的信息保存到数组中。

if (sorting[j] > sorting[j + 1])
{
      Swap(sorting, j, j + 1);

      SortingTraceInfo sortInfo = new SortingTraceInfo(); // struct Variable
      sortInfo.Position = j;  // change position save
      sortInfo.TargetPosition = j + 1;    // changed position save
      sortInfo.SortingNumbers = sorting.ToArray();    // 
      sortingInfos.Add(sortInfo);     
}

我知道改变位置的索引。它输出的结果是richtextbox。

它应用了结果中保存的索引(sortInfo.position)(在richtextbox中)。

导致richtextbox。它适用于索引。 我想要的结果是

每次单击按钮时输出一行和颜色更改。

23 59 59 70 12 92 19 14 77 51 - > 70<颜色为红色,12色蓝色

index(position = 3,tartgetposition = 4),

23 59 59 12 70 92 19 14 77 51 - > 92<颜色为红色,19色为蓝色

index(position = 5,tartgetposition = 6),

23 59 59 12 70 19 92 14 77 51 - > 92<颜色为红色,14色蓝色

index(position = 6,tartgetposition = 7),

然而,我失败了........

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你的问题是如何使用不同颜色的RichTextBox呈现文本! 为此,您可以为每个TextRange项使用Array,并根据项目情况应用画笔颜色(位置 - >红色,TargetPosition - >蓝色,其他 - >黑色),所以对于以下RichTextBox

<StackPanel>
    <RichTextBox Name="Output">
    </RichTextBox>
    <Button Content="Next" Click="Next_OnClick"/>
</StackPanel>

您需要在每个下一个按钮上单击:

  • 清除输出RichTetex
  • 遍历Sorting Array,并根据项目索引创建TextRang
  • 每次发生交换操作时都应执行循环中断操作,以正确显示输出

    public struct SortingTraceInfo
    {
      public int Position;
      public int TargetPosition;
      public int[] SortingNumbers;
    }
    
    public int[] Sorting = new[] { 23, 59, 59, 70, 12, 92, 19, 14, 77, 51 };        
    public List<SortingTraceInfo> SortingInfos=new List<SortingTraceInfo>();
    
    private void Next_OnClick(object sender, RoutedEventArgs e)
    {            
        Output.Document.Blocks.Clear();
        for (int j = 0; j < Sorting.Count()-1; j++)
        {
            if (Sorting[j] > Sorting[j + 1])
            {                   
                //render to RTB
                for (int i = 0; i < Sorting.Count(); i++)
                {
                    if (i==j)
                    {
                        //render the number red 
                        var textRange = new TextRange(Output.Document.ContentEnd, Output.Document.ContentEnd);
                        textRange.Text = Sorting[i] + " ";
                        textRange.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Red);                            
                    }
                    else if(i==j+1)
                    {
                        //render the number blue 
                        var textRange = new TextRange(Output.Document.ContentEnd, Output.Document.ContentEnd);
                        textRange.Text = Sorting[i]+ " ";
                        textRange.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Blue); 
    
                    }
                    else
                    {
                        //render the number black 
                        var textRange = new TextRange(Output.Document.ContentEnd, Output.Document.ContentEnd);
                        textRange.Text = Sorting[i] + " ";
                        textRange.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Black);                             
                    }
                }
    
    
                //Swap(Sorting, j, j + 1);
                int tmp=Sorting[j];
                Sorting[j] = Sorting[j+1];
                Sorting[j + 1] = tmp;
    
                var sortInfo = new SortingTraceInfo(); // struct Variable
                sortInfo.Position = j; // change position save
                sortInfo.TargetPosition = j + 1; // changed position save
                sortInfo.SortingNumbers = Sorting.ToArray(); // 
                SortingInfos.Add(sortInfo);
    
                //handle one sorting operation one at a time 
                break;
            }               
        }           
    }
    

结果:

enter image description here

enter image description here

等...