Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取WPF RichTextBox以在文本上绘制水平线_C#_.net_Wpf_Richtextbox - Fatal编程技术网

C# 获取WPF RichTextBox以在文本上绘制水平线

C# 获取WPF RichTextBox以在文本上绘制水平线,c#,.net,wpf,richtextbox,C#,.net,Wpf,Richtextbox,假设我有一个给定的TextRange范围,它恰好有这个文本在它自己的行上 每当我看到文本时,我想画一条真正的线,而不是仅仅画15个破折号 但是,我需要将破折号保留在那里,以备保存和其他纯文本查看器加载时使用 我发现了如何在RichTextBox中画一条线: var line = new Line {X1 = 10, X2 = 200, Y1 = 5, Y2 = 5, var paragraph = (Paragraph) MyRichTextBox.Document.Blocks.FirstB

假设我有一个给定的TextRange范围,它恰好有这个文本在它自己的行上

每当我看到文本时,我想画一条真正的线,而不是仅仅画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);
但这只是在段落最后一行之后绘制

所以,我的问题是:

我如何绘制,使我的UIElement没有文字换行,以便覆盖虚线


WPF RichTextBox是否可以这样做?

是否可以使用文本装饰。删除线

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);

我认为您必须删除段落中的内联,并用Line元素替换它。在这种情况下,您必须将行元素替换为--on save

    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文档对此进行了测试,该文档在独立段落中有---行,在其他段落中有换行符。

不幸的是,删除线看起来不像一行。只是一条虚线,有人用它来连接这些点。