在FlowDocument中以编程方式创建水平线
本文关键字:方式 创建 水平线 编程 FlowDocument | 更新日期: 2023-09-27 18:06:21
我以编程方式创建FlowDocument,然后将其翻译为富文本,因此用户可以在富文本框中编辑它。我不知道如何在FlowDocument中插入一条水平线,这条水平线将显示在编辑框的整个宽度(以及随后呈现的PDF)。
我发现这个线程(据称)显示如何做我想要的,在XAML:
简单(我认为)水平线在WPF?
还有这个
http://social.msdn.microsoft.com/forums/en us/wpf/thread/bcd334c7 - 8 e2b - 4 - e59 a344 - 4376 b30cf847/
我尝试用编程方式复制这个,像这样:
Line pLine = new Line();
pLine.Stretch = Stretch.Fill;
pLine.Stroke = Brushes.Black;
pLine.X2 = 1;
para.Inlines.Add( pLine );
但是,这最终会在生成的RTF编辑框中显示任何内容。富文本的其余部分在那里。没有行
我还尝试创建一个表格,并将我想要的文本插入到一个单元格的水平线之后。然后我设置了一个自定义的边框,就在Table的顶部。这给了我一条水平线,但它并没有穿过屏幕(在它被转换为RTF并显示在RTF编辑框中之后),并且在我渲染成PDF后它根本没有显示。
我已经采取了完全的hack方法,只插入60个下划线('_')字符和换行符。这"有效",但它很糟糕。有人能告诉我怎么正确地做这个吗?
我正在使用这个小怪物在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
,您的线路也只有一个设备独立单元长。
我使用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);
}