Silverlight-TextBlock換行-LineBreak
在 TextBlock 設(shè)定文字時,也可以使用較直覺的內(nèi)部文字格式,而不使用明確的 Text 屬性集,如以下範(fàn)例:
Copy Code <TextBlock>Hello, world!</TextBlock>| 設(shè)定 Text 屬性時並不會保留前置或尾端空白字元,只會保留內(nèi)部空白字元。 如需以 XAML 處理空白字元的詳細(xì)資訊,請參閱 XAML 概觀。 |
使用 Run 和 LineBreak 物件
TextBlock 並不會呈現(xiàn)單一字串,它也可以呈現(xiàn)不同 Run 項目中所包含的一系列字串,其中每一個項目可以擁有不同的字元層級字型屬性。 LineBreak 物件表示 TextBlock 中的明確新行,而且通常用於周圍 Run 項目之間。LineBreak 與 Run 共用一個基礎(chǔ)類別 (Inline),該類別能夠讓 TextBlock 保留其文字模型內(nèi)容的強(qiáng)型別 InlineCollection。 該 InlineCollection 也是 TextBlock XAML 內(nèi)容屬性,只要將多個 Run 與 LineBreak 項目 (Element) 指定為 TextBlock 的子項目 (Element),即可指定 TextBlock 模型中的項目 (Item)。
下列 XAML 範(fàn)例示範(fàn)如何在 TextBlock 中,藉由使用 Run 物件定義數(shù)個不同格式的文字字串,以 LineBreak 分隔。
XAML Copy Code <!-- Display formatted text as Run objects within a TextBlock. --> <Canvas> <TextBlockFontFamily="Arial" Width="400" Text="Sample text formatting runs"><LineBreak/><Run Foreground="Maroon" FontFamily="Courier New" FontSize="24">Courier New 24</Run><LineBreak/><Run Foreground="Teal" FontFamily="Times New Roman" FontSize="18" FontStyle="Italic">Times New Roman Italic 18</Run><LineBreak/><Run Foreground="SteelBlue" FontFamily="Verdana" FontSize="14" FontWeight="Bold">Verdana Bold 14</Run> </TextBlock> </Canvas>下圖顯示先前 XAML 內(nèi)容範(fàn)例所轉(zhuǎn)譯的格式化文字。
TextBlock rendering multiple Run objects
LineBreak 會強(qiáng)制每個 Run 中的文字換行,以顯示為獨立的一行。 如果沒有使用 LineBreak,每個 Run 中的文字就會連成一行,最後會因為超過 TextBlock 物件寬度或是 Silverlight 內(nèi)容區(qū)域的寬度而遭到裁剪。 下圖顯示格式化文字在沒有使用 LineBreak 物件的情況下的呈現(xiàn)方式。
多個 Run 物件的 TextBlock 呈現(xiàn)方式:沒有 LineBreak 物件的情況下以程式碼存取 TextBlock 文字模型
TextBlock 文字模型中實際包含兩種屬性:Text 與 Inlines。 並不建議您一定要變更 Text 的值,因為它會造成個別 Run 項目 (Item) 上的任一字型項目 (Element) 變得扁平,而且會移除 TextBlock 的 LineBreak 項目 (Element),這個項目原本是以內(nèi)嵌項目形式建構(gòu),而且並不單純的只是 Text。 如需詳細(xì)資訊,請參閱 Inlines。
文字換行
TextWrapping 屬性 (Property) 宣告 TextBlock 中文字的換行方式。 依預(yù)設(shè),TextBlock 中的文字不會自動換行。 因為沒有換行,所以根據(jù)其他設(shè)定,文字可能發(fā)生下列其中一種情況:
-
如果 TextBlock 沒有明確設(shè)定 Width,TextBlock 會根據(jù)其中文字的大小而擴(kuò)展,並且更新 ActualWidth 的值。 不過,TextBlock 一定會在某個其他的容器父項目中,而且會到達(dá)配置父項的鏈結(jié) (Chain),此處也一定是寬度條件約束。 如果超過執(zhí)行的配置條件約束寬度,則會導(dǎo)致文字被剪裁。
-
如果 TextBlock 已明確設(shè)定 Width,則如果超過固定的 Width,TextBlock 會自行進(jìn)行文字剪裁。
如果要使用自動換行,請將 TextWrapping 設(shè)定為列舉值 Wrap。 例如,XAML 中的 <TextBlock Text="The quick red fox jumped over the lazy brown dog." TextWrapping="Wrap" />。 開啟文字換行:
-
如果 TextBlock 沒有明確設(shè)定 Width,則文字會在目前執(zhí)行的配置條件約速寬度的位置進(jìn)行自動換行。
-
如果 TextBlock 已明確設(shè)定 Width,則文字會在固定的 Width 位置進(jìn)行自動換行。
因為 TextBlock 的 ActualWidth 一定會回報文字已擴(kuò)展的大小 (即使與配置容器不符也是如此) 所以您可以透過程式設(shè)計的方式偵測被剪裁的文字。 只要您確切知道在哪裡讀取執(zhí)行剪裁之配置容器的 Width,便可以比較這兩個值。
如需詳細(xì)資訊,請參閱 TextBlock 或 TextWrapping。
未換行與換行文字的 TextBlock 呈現(xiàn)方式TextWrapping 對 ActualWidth 和 ActualHeight 的影響方式
多行 TextBlock 文字
會因為自動換行或明確 LineBreak 項目這兩種因素,TextBlock 中的文字,可能會以多行顯示。 TextBlock 的下列兩個屬性會影響多行文字的顯示方式:LineHeight 以及 LineStackingStrategy。 LineHeight 設(shè)定整體 TextBlock 中的每一行內(nèi)容的高度。 LineHeight 其實是基準(zhǔn)高度的基準(zhǔn),如此一來,如果您設(shè)定小於 FontSize 的 LineHeight,文字可能會以垂直維度被切斷。 通常,您會保留不設(shè)定 LineHeight,而仰賴,根據(jù) FontSize 加上位移呈現(xiàn)有效文字行高度的預(yù)設(shè)值。如果使用 LineStackingStrategy,則它會影響預(yù)設(shè)的演算法。 LineStackingStrategy..::.MaxHeight (預(yù)設(shè)值) 會以字型中任一字元的最大高度做為有效文字行高度的基準(zhǔn)。LineStackingStrategy..::.BlockLineHeight 會以「區(qū)塊」字型設(shè)計度量 (也會儲存為字型中的值) 做為有效文字行高度的基準(zhǔn)。
套用轉(zhuǎn)換到 TextBlock 文字
轉(zhuǎn)換可改變您的應(yīng)用程式中所顯示的文字。 轉(zhuǎn)換是一般的 UI 項目概念,適用於許多不同的類別,包括文字項目。 您會在文字上使用轉(zhuǎn)換效果以及其他可能的使用案例包含下列:
RotateTransform,反轉(zhuǎn)文字
ScaleTransform,用於大於字型中所繼承之支援大小上限的文字
SkewTransform,用於切變或斜體模擬
TranslateTransform,用於位移與陰影效果
當(dāng)您在文字中套用轉(zhuǎn)換時,首先應(yīng)該考慮是否還有其他方法可以使用文字項目屬性而產(chǎn)生類似的效果。 例如,如果字型家旅支援斜體 FontStyle,那麼比起套用 SkewTransform,它的結(jié)果在視覺上能夠產(chǎn)生更吸引人的效果,或者,設(shè)定 FontSize 並使用字型啟用的提示與特點時,比較在文字上設(shè)定 ScaleTransform,也可以獲得較理想的效果。
您可能需要在文字上使用轉(zhuǎn)換的一個使用案例是,您可以設(shè)定轉(zhuǎn)換的動畫,以產(chǎn)生視覺效果。
建立 TextBlock 文字的動畫
許多文字屬性 (Property) 的值可以建立成動畫,包含 FontSize 的文字大小、透過 TranslateTransform 的位置和色彩。 如需哪些屬性值類型支援動畫的詳細(xì)資訊,請參閱動畫概觀。
將文字屬性 (尤其是大小或前景筆刷) 建立成動畫可能會耗用許多系統(tǒng)資源。 這是因為 Silverlight 在呈現(xiàn)文字時,會使用提示來使每個文字圖像變平滑。 如果您建立文字大小的動畫 (藉由使用 Transform 或 FontSize),則 Silverlight 會提示每個畫面的圖像,這是很耗費資源的,並可能會造成畫面捨棄。 如果應(yīng)用程式需要對大型文字進(jìn)行動態(tài)縮放變更,則建議您使用下列其中一種替代方案:
-
以向量圖形模擬文字,例如 Path。
-
在要在其中設(shè)定文字動畫的項目上,將附加屬性 TextOptions..::.TextHintingMode 設(shè)定為值 Animated。 如需詳細(xì)資訊,請參閱 TextOptions。
利用LineBreak實現(xiàn)文本豎排:實做見 泡菜肉絲?的博客?http://www.cnblogs.com/JinDin/archive/2010/03/21/1691206.html
總結(jié)
以上是生活随笔為你收集整理的Silverlight-TextBlock換行-LineBreak的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高等工程数学期末试题2015
- 下一篇: NLP之淘宝商品评论情感分析