如何从 WPF RichTextBox 中选择文本然后替换并着色
Posted
技术标签:
【中文标题】如何从 WPF RichTextBox 中选择文本然后替换并着色【英文标题】:How to select text from WPF RichTextBox then replace and color it 【发布时间】:2017-08-10 00:58:03 【问题描述】:我正在尝试让我的 WPF RichTextBox 看起来像一个编码页面。
我标记了一些单词以确定它是关键字还是字符串,...现在我有这样的文字:
<@$keyword>int<keyword$@> sum;
sum = 1;
Console.WriteLine(<@$string>"0"<string$@>,sum);
结果应该是这样的:
int sum;
sum = 1;
Console.WriteLine("0",sum);
但是“int”是蓝色的,“0”是粉红色的。
这是我的 xaml RichTextBox 代码:
<RichTextBox x:Name="richTextBox"
VerticalScrollBarVisibility="Auto">
<FlowDocument>
<Paragraph>
<Run Text="Binding codeContent"/>
</Paragraph>
</FlowDocument>
</RichTextBox>
我的问题参考this *** question 但它似乎没有解决我的问题。
因为我的 WPF RichTextBox 是用 FlowDocument 构建的,所以我们无法通过 String st = myRichtextBox.Text
之类的东西获取内容文本,我们需要使用 TextRange 来获取其中的文本:TextRange tr = new TextRange(rtb.Document.ContentStart,rtb.Document.ContentEnd)
。
但另一个问题是它获取整个文本,而不是获取我想要的部分内容文本。示例:RichTextBox rtb 包含:<@$keyword>int<keyword$@> sum;sum = 1;Console.WriteLine(<@$string>"0"<string$@>,sum);
,我只想获取 <@$keyword>int<keyword$@>
和 <@$string>"0"<string$@>
并编辑它而不是整个文本。
【问题讨论】:
How to select text from the RichTextBox and then color it?的可能重复 是的,这是同一个问题,但技术不同,我使用的是 WPF RichTextBox,它不允许您轻松获取包含文本。我发现我们可以使用 TextRange 来获取所有文本并对其进行编辑。但是我怎样才能得到确切的文本来编辑它呢? ***.com/questions/957441/… 这可以解决问题 @efekctive 这就是如何在其中获取整个文本。但我只想得到一小部分文字。示例:<@$keyword>int<keyword$@>
但不是 <@$keyword>int<keyword$@> sum;sum = 1; Console.WriteLine(<@$string>"0"<string$@>,sum);
msdn.microsoft.com/en-us/library/aa970909(v=vs.110).aspx
【参考方案1】:
TextRange tr = new TextRange(rtb.Document.ContentStart,rtb.Document.ContentEnd)
tr.Text 为您提供内容的纯字符串。现在你有一个字符串可以与下面的正则表达式/子字符串一起使用:
How to select text from the RichTextBox and then color it?
【讨论】:
以上是关于如何从 WPF RichTextBox 中选择文本然后替换并着色的主要内容,如果未能解决你的问题,请参考以下文章
WPF中RichTextBox的定位问题。如何使光标定位到与指定关键字所在的位置?