- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 WPF 应用程序中有一个 RichTextBox,其中有一个常规文本。我想更改该文本的某些部分的颜色。示例:
文件看起来像这样:
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
我想改变它的颜色:<heading>Reminder</heading>
有什么办法可以实现吗?
窗口的XAML:
<Window x:Class="WpfConfigHelper.Framework.AdditionalWinows.XmlAfterUpdateComparator"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="XmlAfterUpdateComparator" Height="602" Width="1033">
<Grid>
<RichTextBox Height="426" HorizontalAlignment="Left" Margin="9,42,0,0" Name="BeforeXmlUpdated_TextBox" VerticalAlignment="Top" Width="495" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"/>
<RichTextBox Height="426" HorizontalAlignment="Left" Margin="510,42,0,0" Name="AfterXmlUpdated_TextBox" VerticalAlignment="Top" Width="490" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"/>
<Label Content="Before Update:" Height="29" HorizontalAlignment="Left" Margin="205,12,0,0" Name="BeforeXmlUpdated_Label" VerticalAlignment="Top" Width="115" />
<Label Content="After Update:" Height="31" HorizontalAlignment="Left" Margin="697,12,0,0" Name="AfterXmlUpdated_Label" VerticalAlignment="Top" Width="87" />
<Label Content="Do you agree to perform the changes from the right text box?" Height="33" HorizontalAlignment="Left" Margin="338,485,0,0" Name="DoYouAgreeWithChanges_Label" VerticalAlignment="Top" Width="497" />
<Button Content="Yes" Height="27" HorizontalAlignment="Left" Margin="308,524,0,0" Name="AgreedWithChanges_Button" VerticalAlignment="Top" Width="196" Click="AgreedWithChanges_Button_Click" />
<Button Content="No" Height="29" HorizontalAlignment="Left" Margin="516,524,0,0" Name="DisagreedWithChanges_Button" VerticalAlignment="Top" Width="221" Click="DisagreedWithChanges_Button_Click" />
<Label Content="Text removed" Height="39" HorizontalAlignment="Left" Margin="12,474,0,0" Name="label1" VerticalAlignment="Top" Width="177" Foreground="Red" FontSize="13"/>
<Label Content="Text inserted" Height="41" HorizontalAlignment="Left" Margin="906,477,0,0" Name="label2" VerticalAlignment="Top" Width="93" Foreground="Green" FontSize="13"/>
</Grid>
不久前,我看到一段使用正则表达式的代码,用于映射整个短语并更改其在文本中的颜色,但我看不到它发生在这里。文本是静态的,没有完全格式化。
您认为我可以以某种方式对其进行转换,以便我可以对其进行格式化,然后在使用颜色、字体等格式化的 RichTextBox 中显示它吗?
最佳答案
在 RichTextBox 中,您可以使用 TextRange 修改特定文本区域的字体。 TextRang 需要开始和结束指针。如果已经对某些文本区域应用了格式设置,则无法使用索引在现有 RichTextBox 内容中获取这些指针,因为 RichTextBox 将文本内容视为符号而不是字符。因此,我建议您为您的问题创建一个自定义 RichTextBox。在这里,我创建了派生自 RichTextBox 的 CustomRichTextBox。方法 ApplyPropertyValue 用于格式化指定的文本区域。
public class CustomRichTextBox : RichTextBox
{
private readonly List<FormattingTag> formattingTags = new List<FormattingTag>();
public IEnumerable<FormattingTag> FormattingTags
{
get { return this.formattingTags; }
}
public void ApplyPropertyValue(int startIndex, int length, DependencyProperty formattingProperty, object value)
{
TextRange documentRange = new TextRange(this.Document.ContentStart, this.Document.ContentEnd);
documentRange.ClearAllProperties();
string documentText = documentRange.Text;
if (startIndex < 0 || (startIndex + length) > documentText.Length)
{
return;
}
this.CaretPosition = this.Document.ContentStart;
this.formattingTags.Add(FormattingTag.GetTag(this.Document.ContentStart, startIndex, length, formattingProperty, value));
foreach (var formattingTag in formattingTags)
{
formattingTag.ApplyFormatting();
}
}
}
在自定义控件中,您必须维护所有应用的格式。为此,我创建了下面的类来保存格式信息。
public class FormattingTag
{
private int start;
private int length;
private FormattingTag(int start, int length)
{
this.start = start;
this.length = length;
}
public int Start
{
get{ return this.start; }
}
public int Length
{
get { return this.length; }
}
public TextPointer StartPosition { get; private set; }
public TextPointer EndPosition { get; private set; }
public DependencyProperty FormattingProperty { get; private set; }
public object Value { get; private set; }
public static FormattingTag GetTag(TextPointer start, int startIndex, int length, DependencyProperty formattingProperty, object value)
{
while (start.GetPointerContext(LogicalDirection.Forward) != TextPointerContext.Text)
{
start = start.GetNextContextPosition(LogicalDirection.Forward);
}
TextPointer contentStart = start.GetPositionAtOffset(startIndex);
TextPointer contentEnd = contentStart.GetPositionAtOffset(length);
FormattingTag tag = new FormattingTag(startIndex, length);
tag.StartPosition = contentStart;
tag.EndPosition = contentEnd;
tag.FormattingProperty = formattingProperty;
tag.Value = value;
return tag;
}
public void ApplyFormatting()
{
TextRange range = new TextRange(this.StartPosition, this.EndPosition);
range.ApplyPropertyValue(this.FormattingProperty, this.Value);
}
}
您可以像下面这样为文本应用格式。
this.richTextBox.ApplyPropertyValue(2, 5, TextElement.ForegroundProperty, Brushes.Red);
this.richTextBox.ApplyPropertyValue(8, 11, TextElement.ForegroundProperty, Brushes.Blue);
关于c# - 如何更改 RichTextBox 文本内容中特定单词(或短语)的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16962016/
我对 RichTextBox 控件感到困惑。 我的 WinForm 有一个 RichTextBox 控件,宽度为 100px。我想动态创建一个然后引用实例。 因此,假设在我的 Form 上我有一个名为
MouseDown 事件处理程序的 KeyDown 事件处理程序中 e.Handled = true 的等价物是什么?我不希望鼠标事件对 RichTextBox 有任何影响(完全禁用鼠标与 RichT
我有一个 richtextbox,它的文本是特定表格中一些单词的串联。 (表格列是'word','translate'和'id') 我需要当用户将鼠标悬停在每个单词上时,相关的翻译会显示在单词的工具提
您好,我在将 richtextbox 中的数据显示或传输到其他 richtextbox 时遇到问题... richtextbox1.Document = richtextbox2.Document;
我正尝试在我的 Windows Phone 8 应用程序中使用 RichTextBox。用户需要能够选择文本并将其复制到剪贴板。用户不需要编辑文本,只需选择它。但是,我似乎无法在 Windows Ph
我有一个 Winforms 项目,我可以在其中将文本写入 RichTextBox,还有一些控件可以设置所写文本的字体格式。我能够将文本保存并附加到 RTF 文件,但我在保留每个 RichTextBox
假设我有以下内容:
我需要一些具有富文本编辑功能的基本 CMS 功能。在 stack overflow 上有一个常规的文本区域编辑控件,支持 Markdown 样式语法格式。那将超出我的用户范围,所以我想要一个类似丰富的
显示图像: 复制代码代码如下: Image img = Image.FromFi
我遇到过 RichTextBox 的一些奇怪行为。我希望它是readonly,但是当我使用时它不显示图像richTextBox.LoadFile(path) 方法加载.rtf 文件。当它不是reado
我需要将 ScrollBars 设置为 ForcedBoth 但我还想知道 ScrollBars 的句柄何时可见并且用户可以滚动。 两个滚动条的 bool 值都可以 这里用户不能滚动: 在这里他们可以
我正在开发根据正则表达式模式在 RichTextBox 中突出显示文本的应用程序。 它工作正常,除了性能,即使对于小文本(大约 500 个字符),它也会挂起一段时间,这对用户是可见的。 我在 Flow
我在我的 WPF richtextbox 上启用了拼写,我想在显示带有拼写建议的上下文菜单之前在当前插入符号位置获取拼写错误的单词。 最佳答案 新方式 void richTextBox1_Pr
我在 .NET Windows 窗体应用程序中使用 RichTextBox 控件。我允许用户在文本框本身内按 TAB 键。但是,当我将 .Text 值保存在文本框中时,它将显示如下: "This[]i
我在 MS Word 中创建了带有超链接的 rtf 文件并将其加载到 RichTextBox 中。 RichTextBox 中的超链接不起作用。 RichTextBox 和 MS Word 使用不同的
有没有办法改变 RichTextBox 中下划线的颜色? ? 我试过 this但它似乎不起作用。有人知道这些枚举值是从哪里来的吗?没有看到它的任何文档。 谢谢。 最佳答案 枚举值是将消息传递给控件时的
这是交易:我有一个 RichTextBox 控件,它工作正常。问题是有一个“插入当前日期时间”按钮,它将当前日期时间添加/注入(inject)到 RichTextBox 中。用户可以在插入符号指向的任
我正在编写一个小应用程序,我可以在其中加载文本文件以匹配正则表达式: 我根据匹配行的长度更改前景色文本, 问题是,如果一行是多行,那么它不会按预期工作并且只选择该行的一半,例如以“title”开头的第
我有一个 RichTextBox在我的应用程序中,它正在获取有关某些事件的新内容。 添加新内容时,我想滚动到底部,仅当 卷轴在底部 之前 . 我该怎么做呢? 更具体地说,给我带来麻烦的部分是确定滚动位
当加载 50KB 的文本文档时,WPF 的 RichTextBox 控件的性能确实很慢。滚动滞后并按 Ctrl-A 选择所有文本需要 10 多秒钟。 (这在记事本上是瞬时的)。 我没有做任何花哨的位图
我是一名优秀的程序员,十分优秀!