2

我正在以编程方式创建 FlowDocument,然后将其转换为富文本,以便用户可以在富文本框中对其进行编辑。我无法弄清楚如何在 FlowDocument 中插入一条水平线,该水平线将显示在编辑框的整个宽度上(以及随后呈现的 PDF)。

我发现这个线程(据称)显示了如何在 XAML 中完全按照我的意愿行事:

WPF中的简单(我认为)水平线?

和这个:

http://social.msdn.microsoft.com/forums/en-US/wpf/thread/bcd334c7-8e2b-4e59-a344-4376b30cf847/

我试图以编程方式复制它,如下所示:

        Line pLine = new Line();
        pLine.Stretch = Stretch.Fill;
        pLine.Stroke = Brushes.Black;
        pLine.X2 = 1;
        para.Inlines.Add( pLine );

但是,这最终在生成的 RTF 编辑框中什么都不显示。富文本的其余部分在那里。就是根本没有线。

我还尝试创建一个表格并将我想要在水平线之后的文本插入到单元格中。然后我为表格的顶部设置了一个自定义边框。这给了我一条水平线,但它并没有一直穿过屏幕(在它转换为 RTF 并显示在 RTF 编辑框中之后),并且在我将它渲染成 PDF 后它根本不显示。

我已经采取了完全破解的方法,即插入 60 个下划线('_')字符和换行符。这“有效”,但很糟糕。谁能告诉我如何正确地做到这一点?

4

2 回答 2

1

我对 Otto 方法的体验是它在编辑器中绘制了一条漂亮的水平线,但该线并未保存在 RTF 文件中。我方便的 O'Reilly 小“RTF 袖珍指南”产生了一个兼具两者的 RTF 块。这是我的“插入换行符”工具栏按钮的单击处理程序...

    private void InsertLineBreak_Click(object sender, RoutedEventArgs e)
    {
        MemoryStream stream = 
            new MemoryStream(ASCIIEncoding.Default.GetBytes(@"{\pard\brdrb\brdrs\brdrw10\brsp20\par}"));
        rtbEditor.Selection.Load(stream, DataFormats.Rtf);
    }
于 2014-10-06T17:03:58.147 回答
1

我正在使用这个小怪物在 RichTextBox 中的当前光标位置插入一行。

var ruler = new Line { X1 = 0, Y1 = 0, X2 = 1000, Y2 = 0, Stroke = new SolidColorBrush(Colors.Black), StrokeThickness = 2 };

new InlineUIContainer(ruler, richtextbox.CaretPosition.GetInsertionPosition(LogicalDirection.Forward));

我想你忘了设置StrokeThickness. 即使您将Stretch.Fill线路设置为只有一个设备独立单元长。

于 2013-05-16T10:19:38.290 回答