假设我有一个给定的TextRange range
,碰巧在它的-----------------
中有这个文本(在它自己的行上)
我想在看到该文本时画一条真正的线(而不是仅仅15个破折号)。
但是,我需要在保存它时(以及其他纯文本查看器加载它时)留下破折号。
我发现如何在RichTextBox中绘制一条线:
var line = new Line {X1 = 10, X2 = 200, Y1 = 5, Y2 = 5,
var paragraph = (Paragraph) MyRichTextBox.Document.Blocks.FirstBlock;
paragraph.Inlines.Add(line);
但是这只是在段落的最后一个内联之后绘制。
那么,我的问题是:
我怎么画,使我的元素没有文本包装(这样我就可以覆盖破折号)?
这是可能的与WPF RichTextBox?
可以使用" text装饰品"吗?
TextRange range = new TextRange(RichTextBox.Selection.Start, RichTextBox.Selection.End);
TextDecorationCollection tdc = (TextDecorationCollection)RichTextBox.Selection.GetPropertyValue(Inline.TextDecorationsProperty);
if (!tdc.Equals(TextDecorations.Strikethrough))
{
tdc = TextDecorations.Strikethrough;
}
range.ApplyPropertyValue(Inline.TextDecorationsProperty, tdc);
我认为您必须从段落中删除Inline
并将其替换为Line
元素。在这种情况下,您必须在保存时将Line
元素替换为"-----"。
private void FindHRules()
{
foreach (Paragraph block in rtf.Document.Blocks.OfType<Paragraph>())
{
var inlines = block.Inlines.ToList();
for(int i = 0; i<inlines.Count; i++)
{
var inline = inlines[i];
TextRange r = new TextRange(inline.ContentStart, inline.ContentEnd);
if (r.Text.StartsWith("--"))
{
Line l = new Line { Stretch = Stretch.Fill, Stroke = Brushes.DarkBlue, X2 = 1 };
block.Inlines.InsertAfter(inline, new InlineUIContainer(l));
block.Inlines.Remove(inline);
}
}
}
}
我用一个RTF文档测试了这一点,该文档在独立段落中有"-----"行(