2011-05-17 54 views
6

我有一個由矩形和幾個動態創建的標籤(動態的,因爲在設計時我不知道應該顯示多少個標籤)組成的複合控件。標籤的位置(邊距)通過組合整個控件大小,通過依賴屬性傳遞的附加集合以及標籤本身的高度,在運行時進行評估。在渲染過程之前確定控件的大小

不幸的是,在渲染之前,我並沒有採用確定性的方式確定標籤高度。 ActualWidthActualHeight在顯示標籤之前爲0,沒有設置寬度/高度,因爲我希望標籤根據其內容自行調整大小,DesiredSize返回0,正確的尺寸或尺寸超過實際標籤尺寸(如2或3次),RenderSize返回有效大小或0,它就像第一個標籤返回有效大小,第二個 - 0.0,沒有任何明顯的原因。

我試過用double.PositiveInfinity調用Measure()只是爲了達到目的,當DesiredSize的方式比預期的要大時(所有的標籤都有相同的字體,只包含數字,所以它們都會有更多的較小的相似尺寸,但首先有〜16像素,第二〜36,雖然在渲染後,RenderSize是有效的兩個)。

是否有檢查所需的控制大小確定性方式,僅基於內容(而不是在對準/利潤)它呈現在屏幕前?

回答

9

您可以使用UpdateLayout強制執行度量/佈局過程。調用此方法後,ActualWidthActualHeight將具有正確的值。

+6

我已經測試了一點,遇到了一些情況,甚至在父級和標籤本身都調用UpdateLayout之後,ActualHeight的標籤爲0.0。在渲染之前,似乎還沒有確定性的方法來確定對象的高度...... – Spook 2011-05-20 10:17:51

+0

適合我。 – David 2012-08-13 22:22:05

+0

你的答案似乎是迄今爲止最接近解決方案,所以我會接受它:) – Spook 2013-01-08 20:41:47