我在FlowDocument
中找到了Run
或Paragraph
,现在我需要知道它的高度。
即
while (navigator.CompareTo(flowDocViewer.Document.ContentEnd) < 0)
{
TextPointerContext context = navigator.GetPointerContext(LogicalDirection.Backward);
Run run = navigator.Parent as Run;
// I need to get HEIGHT of Run in pixels somehow
事实上有可能做到吗?
谢谢大家!
2条答案
按热度按时间mwngjboj1#
我正在使用的一个小函数。输入是一个包含Section的字符串。您可以轻松地渲染其他块元素,如Paragraph。
还可以省略Parse方法的第二个参数。
诀窍是不测量段落,但包含RichTextBox的ViewBox。这是实际渲染Flowdocument所需的。ViewBox动态获取rtb的大小。也许你甚至可以在没有ViewBox的情况下做到这一点。我花了一些时间来弄清楚这一点,它对我很有效。
请注意,
RichTextBox
的Width
被设置为double.MaxValue
。这意味着当你想测量一个段落时,它必须很长或者所有内容都在一行中。所以只有当你知道输出设备的宽度时,这才有意义。因为这是一个FlowDocument,没有宽度,它流动;)我用这个来给一个FlowDocument分页,在那里我知道纸张大小。返回的高度是独立于设备的单位。
ewm0tg9j2#
这对我很有效:
在我的例子中,我的
Run
都以换行符结束,所以我可以从start.Top
到end.Top
进行测量,但您可能需要检查end.Bottom
。