亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

UWP:計算 RichTextBlock 中的文本高度會產生奇怪的結果

UWP:計算 RichTextBlock 中的文本高度會產生奇怪的結果

C#
守候你守候我 2022-12-24 13:55:56
我需要一種可靠的方法來獲取 a 中包含的文本的高度RichTextBlock,甚至在實際繪制到場景之前。使用普通的 Measure() 方法會產生一個奇怪的結果,正如在 MVCE 中看到的那樣:https ://github.com/cghersi/UWPExamples/tree/master/MeasureText (我想保持固定寬度,并測量最終高度,但 DesiredSize 的結果與實際高度相差甚遠!?。?。出于這個原因,我找到了一個粗略的方法(在此處提到https://stackoverflow.com/a/45937298/919700),我對其進行了擴展以達到我的目的,我們使用一些 Win2D API 來計算內容高度。問題是在某些情況下,此方法提供的高度小于預期高度。有沒有一種通用的方法來檢索 TextBlock 的(正確的)高度,甚至在它被繪制到場景之前?如果不是這種情況,我做錯了什么?這是我的代碼(您也可以在這里找到 MVCE:https ://github.com/cghersi/UWPExamples/tree/master/RichText ):
查看完整描述

1 回答

?
30秒到達戰場

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 在樹中和繪圖時您實際想要的邊距。如果是這種情況,那么您可以:

  1. 使用 Width=300 方法測量并從 DesireSize.Height 中減去頂部 + 底部邊距。

  2. 用 (300+margin.Left+margin.Right) 作為寬度進行測量,這樣一旦從總可用尺寸中減去邊距,文本可以使用的剩余寬度就是您預期的 300。您仍然需要從頂部減去+ DesireSize.Height 的底部邊距。


查看完整回答
反對 回復 2022-12-24
  • 1 回答
  • 0 關注
  • 101 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號