1 回答

TA貢獻1828條經驗 獲得超6個贊
查看您的 MeasureText MVCE 代碼,在 RichTextBlock 上調用 Measure() 的問題歸結為這一行:
m_textBlock.Margin = new Thickness(200);
這將所有邊的通用邊距設置為 200,這意味著元素至少需要左側 200 寬度加上右側 200 寬度,或 400 寬度。由于您的 Measure(300,infinite) 指定的可用寬度小于所需的最小寬度 400,因此 RichTextBlock 決定它能做的最好的事情是在每個字符處包裝文本,從而產生巨大的 5740 像素高度(加上 200+200從邊距的高度)。
如果刪除該行,RichTextBlock 將使用指定的 300 約束并將其所需高度正確測量為 90 像素,這就是它在屏幕上呈現的高度(如果設置 Width=300 或以其他方式導致實際元素布局具有相同的約束)。
或者,由于您知道元素所需的寬度,您可以在其上設置 Width=300,然后它將使用該寬度進行測量。但是,高度將由于設置的邊距而擴大。
我假設您實際上并沒有在您的真實應用程序中設置 Margin=200,而是有一些更小的東西,例如 Margin=5 來說明當 RichTextBlock 在樹中和繪圖時您實際想要的邊距。如果是這種情況,那么您可以:
使用 Width=300 方法測量并從 DesireSize.Height 中減去頂部 + 底部邊距。
用 (300+margin.Left+margin.Right) 作為寬度進行測量,這樣一旦從總可用尺寸中減去邊距,文本可以使用的剩余寬度就是您預期的 300。您仍然需要從頂部減去+ DesireSize.Height 的底部邊距。
- 1 回答
- 0 關注
- 101 瀏覽
添加回答
舉報