c# rtb:粗体内联覆盖另一个粗体内联

本文关键字:另一个 覆盖 rtb | 更新日期: 2023-09-27 18:32:41

我的项目是一个Windows 10通用应用程序!

我几乎有两个月的问题,当我在一个 rtb 中加粗两个单词时,第二个会覆盖第一个粗体内联。

例:

我想加粗:

Hello; Bye

来自 rtb 的文本:

Hello and Bye

现在我用正则表达式搜索,天气是 rtb 中的"你好"/"再见"。对于每次在 rtb 中有"Hello"时,我都会在与"hello"代表相同的位置插入一个带有文本"Hello"的粗体。

之后,我用"再见"做同样的事情。

我的代码:

string text = run.Text; -> "Hello and Bye"
MatchCollection mc = Regex.Matches(text, "Hello", RegexOptions.Multiline);
int i = 0;
var bold = new Bold();
int iIn = 0;
int iLe = 0;
p.Inlines.Clear(); -> p = Paragraph from rtb
foreach (Match match in mc)
{
       p.Inlines.Add(new Run { Text = text.Substring(i, match.Index - i) });
       bold.Inlines.Add(new Run { Text = text.Substring(match.Index, match.Length) });
       p.Inlines.Add(bold);
       i = match.Index + match.Length;
       if (i < text.Length)
       {
             p.Inlines.Add(new Run { Text = text.Substring(i) });
       }
}

接下来是带有 bye 的相同代码。

现在的问题是,我清除了第一个粗体内联(您好),同时插入了第二个粗体内联(再见)。

有谁知道在 rtb 中加粗特定单词的替代方案或改进代码的建议?我几乎尝试了一切,但没有任何真正效果...

c# rtb:粗体内联覆盖另一个粗体内联

使用以下命令以选择相关字符以加粗:"

public void Select(
  TextPointer start, 
  TextPointer end
)
In order to get TextPointer, try this (not checked):
TextPointer pointer = document.ContentStart;
TextPointer start = pointer.GetPositionAtOffset(0);
TextPointer end = start.GetPositionAtOffset(5);
rtb.Select (start,end); // for example to select Hello
                 // Then change the font to bold