This article has been localized into Chinese by the community.
TextBlock控制項
TextBlock 本身不是控制項,因為它並沒有繼承Control類別,但是它使用起來和WPF框架中的其他控制項類似,所以為了方便我們還是稱它為控制項。
TextBlock是WPF中最基本的控制項,但非常好用。它允許你顯示文字在螢幕上,像是Label控制項一樣,但使用起來比Label更簡單、使用更少資源作法。一般來說,Label用於短、單行的文字(但可能包含其它,像是圖片等...),而TextBlock對於多行的文字非常適合(但只能是文字形式)。Label和TextBlock都有自己獨特的優點,所以怎麼使用就取決於你的情況。
在"Hello, WPF!"的章節中,我們已經使用了TextBlock控制項,但是現在,我們要來看看TextBlock最簡單的形式:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockSample" Height="100" Width="200">
<Grid>
<TextBlock>This is a TextBlock</TextBlock>
</Grid>
</Window>
如果你已經閱讀了前面的章節,你會覺得這非常簡單,那這裡應該沒有什麼新東西了。在TextBlock標籤中的文字,是表示TextBlock的Text 屬性的簡短方法。
在下一個例子中,我們用更長的文字來展示TextBlock如何處理它。同時也增加一點margin讓它看起來更好一點。
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockSample" Height="100" Width="200">
<Grid>
<TextBlock Margin="10">This is a TextBlock control and it comes with a very long text</TextBlock>
</Grid>
</Window>
長字串處理
如截圖所示,TextBlock非常適合用來處理長或多行文字,但預設不會進行其他動作。在這個例子中,文字太長以至於無法完整呈現在視窗中,所以WPF盡可能的將文字呈現到停止。
幸運地,有許多方法可以處理這個問題。在下一個例子中,我將告訴你所有的方法,並在之後一一說明。
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockSample" Height="200" Width="250">
<StackPanel>
<TextBlock Margin="10" Foreground="Red">
This is a TextBlock control<LineBreak />
with multiple lines of text.
</TextBlock>
<TextBlock Margin="10" TextTrimming="CharacterEllipsis" Foreground="Green">
This is a TextBlock control with text that may not be rendered completely, which will be indicated with an ellipsis.
</TextBlock>
<TextBlock Margin="10" TextWrapping="Wrap" Foreground="Blue">
This is a TextBlock control with automatically wrapped text, using the TextWrapping property.
</TextBlock>
</StackPanel>
</Window>
我們有三個不同顏色的TextBlock(使用Foreground屬性)方便觀看,它們各以不同的方法處理文字太長的問題。
紅色的TextBlock使用了LineBreak標籤在指定的地方手動換行。這讓你可以絕對的控制在你想換行的地方換行,但在許多情況下用起來並不靈活。如果使用者放大視窗,有了足夠的空間可以完整顯示整行文字,文字依然在同樣的地方換行。
綠色的TextBlock 使用了 TextTrimming屬性並設為CharacterEllipsis,讓TextBlock在沒有足夠空間的時候顯示...。在沒有足夠空間顯示這麼多文字時,這是一種常見的方法。這也很適合用在當空間不足而且你不想使用多行的時候。你也可以使用CharacterEllipsis的另一種WordEllipsis,當空間不足的時候,以最後一個單字為單位顯示,就不會有單字只顯示一部分的問題發生。
藍色的TextBlock使用了TextWrapping 屬性並設為Wrap,讓TextBlock在沒有足夠空間顯示時自動換行。與第一個我們手動換行的TextBlock相反,它是完全自動的,甚至在TextBlock的空間變動時也會自動調整。試著在這個例子中放大縮小視窗,你將會看到在不同情況下它是如何調適的。
這是在TextBlock中,所有簡單的處理法。在下一個章節中,我們將探討一些TextBlock更高級的功能,讓我們可以創造更多樣式的TextBlock。