Можно ли измерить высоту блока / секции в потоковом документе WPF? - PullRequest
2 голосов
/ 24 августа 2011

Таким образом, я строю абзац потокового документа за абзацем, и мне было интересно, есть ли способ, которым я мог бы измерить высоту блока в данный момент времени.

мой код выглядит примерно так:

section s = new section();

block b1 = new Block(new Run("Text here"));//add height to total block height
block b2 = new Block(new Run("Text here"));//add height to total block height
block b3 = new Block(new Run("Text here"));//add height to total block height
block b4 = new Block(new Run("Text here"));//add height to total block height

s.blocks.add(b1);s.Blocks.Add(b2)...;s.blocks.add(b4)
//measure section here

FlowDocument f = new FlowDocument;

f.Blocks.Add(s);

Я могу либо измерить каждый абзац после его добавления, и продолжить подсчет,

OR

Я мог бы измерить весь раздел после того, как все блоки были добавлены в него.

это возможно?

спасибо!

Ответы [ 2 ]

1 голос
/ 14 января 2012

Модель FlowDocument, основанная на FrameworkContentElement, а не FrameworkElement, не наследует такие параметры, как параметры «Видимость», «Высота» и «Ширина».

Единственный способ принудительного измерения, который я нашел, только тогда, когда не было другого способа, заключался в том, чтобы вводить элементы UIE в документ с использованием BlockUIContainer. Названный UIElement может быть измерен во время выполнения. Это, честно говоря, немного уродливый хак, но я не нашел другого пути к этому.

0 голосов
/ 26 июля 2017

Вы можете сделать это так.

Block b1 = new Block(new Run("Text here"));
double width = .0;

Rect r = b1.ElementStart.GetCharacterRect(LogicalDirection.Forward);

//add height to total block height
width += r.Height;

Тот же метод можно использовать для получения высоты даже Section. Хотя я все еще ищу более быстрое решение, но оно работает просто отлично. Я буду держать вас в курсе, если найду что-нибудь еще. :)

...