2011-08-23 79 views
2

所以我建立由段落的FlowDocument的段落,我在想,如果有,我可以在給定時間測量塊的高度的方法。有沒有一種方法可以測量WPF flowdoc中塊/節的高度?

我的代碼看起來是這樣的:

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

我能測量整個節,所有塊都添加到它之後。

這可能嗎?

謝謝!

+0

問:你爲什麼要建立由段流文件的段落?我最近做了一些流程文檔的工作,並避免手動構建文檔。 – Dennis

+0

至於你的問題,你可以使用Section或Block的'ActualHeight'屬性......不確定,必須自己測試一下。 – Dennis

+0

嗯。你如何建立流文檔?大聲笑。並沒有實際的身高屬性(除非我在錯誤的地方看) – Toadums

回答

1

的FlowDocument的模型,基於FrameworkContentElement上沒有FrameworkElement的,沒有繼承這樣善良的能見度,高度和寬度設置。

我發現測力,只有在沒有其他辦法的唯一途徑,就是注入到UI元素使用BlockUIContainer文檔。命名的UIElement可以在運行時進行測量。說實話,這是一種醜陋的黑客攻擊,但我還沒有找到另一種方式來解決這一問題。

0

你可以不喜歡這樣。

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也可以使用同樣的方法來獲得高度。儘管如此,我仍然在尋找更快的解決方案,但這個工作很好。如果我找到其他任何東西,我會保持張貼。 :)

相關問題