WPF 中 RichTextBox 关键词着色

使用RichTextBox进行文字编辑但需要把其中的()括号显示成红色用户输入文字时,只要输入括号就显示为红色怎么做呢?... 使用RichTextBox 进行文字编辑
但需要把其中的 ( ) 括号显示成红色
用户输入文字时,只要输入括号就显示为红色
怎么做呢?
展开
 我来答
百度网友445d40b
2012-11-15 · TA获得超过146个赞
知道小有建树答主
回答量:150
采纳率:100%
帮助的人:148万
展开全部
用户输入时加红色标记,就需要再每次按键都判段,下面这段代码倒是实现了,但是效率很低,你可以试着优化下
 private void richTextBox1_KeyUp(object sender, KeyEventArgs e)
  {
  //获取richTextBox文本内容
  TextRange tr1 = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd);
tr1 .ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Black);
  string content = tr1.Text;
//正则表达式,获取匹配()的子字符串集信息
  MatchCollection mc = Regex.Matches(content, @"\(|\)");
  //遍历每个匹配子字符串
foreach (Match m in mc)
  {
  if (m.Success)
  {
//获取子字符串起始点
  TextPointer txStart = GetPointerFromCharOffset(m.Index, richTextBox1.Document.ContentStart, richTextBox1.Document);
  //获取子字符串结束
TextPointer txEnd = GetPointerFromCharOffset(m.Index + m.Length, richTextBox1.Document.ContentStart, richTextBox1.Document);
  //获取子字符串位置
TextRange tr = new TextRange(txStart, txEnd);
//应用样式
  tr.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Red);
}

  }
  }

//根据匹配字符串的索引获取TextPointer
  public TextPointer GetPointerFromCharOffset(Int32 charOffset, TextPointer startPointer, FlowDocument document)
  {
  TextPointer navigator = startPointer;
  if (charOffset == 0)
  {
  return navigator;
  }
  TextPointer nextPointer = navigator;
  Int32 counter = 0;
  while (nextPointer != null && counter <= charOffset)
  {
  if (nextPointer.CompareTo(document.ContentEnd) == 0)
  {
  return nextPointer;
  }
  nextPointer = nextPointer.GetNextInsertionPosition(LogicalDirection.Forward);
  counter++;
  }
return nextPointer;

  }

参考资料: http://social.msdn.microsoft.com/Forums/zh-SG/wpfzhchs/thread/89af5ff2-3918-4b97-8c53-95bfc37c4f0e

Mickal小米
2012-11-15 · TA获得超过3666个赞
知道大有可为答主
回答量:1542
采纳率:100%
帮助的人:1780万
展开全部
提供下我的思路哈。我的思路是在RichTextBox 的contentChanged事件里去判断输入的内容的最后一个符号是否是“(”or ")"。如果是的话,先删除输入的这个符号,再在后台加一个有颜色的run插入到文本中去。可能我的方法有点弱哈。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式