• WPF Richtextbox文字标记


    1.利用正则获取文字位置

     1 TextRange t=new TextRange(MyRichTextBox.Document.ContentStart,MyRichTextBox.Document.ContentEnd);
     2 var strR=new StringBuilder();
     3 for (int i = 0; i < strKeyWord.Length; i++)//strKeyword为要查找的关键字
     4 {
     5 strR.Append("[");
     6 strR.Append(strKeyWord[i]);
     7 strR.Append("]");
     8 }
     9 Regex regex = new Regex(strR.ToString());
    10 var matchs = regex.Matches(t.Text);

    2.解析正则表达式结果并标记文字

    1 foreach (Match match1 in match)
    2 {
    3         TextRange tr = new TextRange(GetTextPointerAtOffset(MainRichTextBox,match1.Index), GetTextPointerAtOffset(MainRichTextBox,match1.Index+match1.Length));
    4          tr.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Red);//设置关键字颜色
    5          tr.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Bold);//设置关键字加粗
    6 }

    3.GetTextPointerAtOffset函数(本函数转自https://answer-id.com/51419225

     1 /// The rich text box.
     2 /// The offset.
     3 /// The TextPointer at the given character offset
     4 public  TextPointer GetTextPointerAtOffset( RichTextBox richTextBox, int offset)
     5         {
     6             var navigator = richTextBox.Document.ContentStart;
     7             int cnt = 0;
     8 
     9             while (navigator.CompareTo(richTextBox.Document.ContentEnd) < 0)
    10             {
    11                 switch (navigator.GetPointerContext(LogicalDirection.Forward))
    12                 {
    13                     case TextPointerContext.ElementStart:
    14                         break;
    15                     case TextPointerContext.ElementEnd:
    16                         if (navigator.GetAdjacentElement(LogicalDirection.Forward) is Paragraph)
    17                             cnt += 2;
    18                         break;
    19                     case TextPointerContext.EmbeddedElement:
    20                         //TODO: Find out what to do here?
    21                         cnt++;
    22                         break;
    23                     case TextPointerContext.Text:
    24                         int runLength = navigator.GetTextRunLength(LogicalDirection.Forward);
    25 
    26                         if (runLength > 0 && runLength + cnt < offset)
    27                         {
    28                             cnt += runLength;
    29                             navigator = navigator.GetPositionAtOffset(runLength);
    30                             if (cnt > offset)
    31                                 break;
    32                             continue;
    33                         }
    34                         cnt++;
    35                         break;
    36                 }
    37 
    38                 if (cnt > offset)
    39                     break;
    40 
    41                 navigator = navigator.GetPositionAtOffset(1, LogicalDirection.Forward);
    42 
    43             }//End while.
    44 
    45             return navigator;
    46         }
  • 相关阅读:
    关于zindex的那些事儿
    使用前端框架Foundation 4来帮助简化响应式设计开发
    超棒的输入特效 Fancy Input
    跳跃的圆形幻灯片
    来自Twitter的自动文字补齐jQuery插件 Typeahead.js
    Xtype定义( Xtype defined )
    EXT基础-元素滑动(Easy Ext Page Basics > Sliding Elements )
    JavaScript 使用面向对象的技术创建高级 Web 应用程序
    HTML 中对client、offset、scroll的认识
    Jash跨浏览器的Javascript命令行调试工具
  • 原文地址:https://www.cnblogs.com/dreamos/p/12531366.html
Copyright © 2020-2023  润新知