文本框本质上并不是一个控件,因为它不继承于控件类,然而在WPF中它使用情况和其他控件几乎一样,因此我们仍称它为控件。
文本框控件是WPF中最基础的控件之一,非常实用。它将文字显示到屏幕上,和标签控件一样,但是比标签更简单,占资源更少。普遍的共识是标签用于简短的单行文本(包括图片),而文本框多用于多行文本。标签和文本框各有优点,根据具体情况来使用。
在"Hello, WPF!"一章中,我们已经使用过一个文本框控件,下面,我们来看看文本框最简单的格式:
<span style="font-size:14px;"><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></span>
这没什么新鲜的,TextBlock之间的文字其实是Text属性的快捷设置。
下面我们尝试把一段长文字放到文本框,看看它是如何工作的。为了看起来更舒服,加了一个留边空白。
<span style="font-size:14px;"><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></span>
处理长字符串
很快就能发现,文本框可以很好的兼容长字符串,但是不会自动换行,需要设置。上面的文本太长,无法在窗口显示完整。
下面就来处理这个问题:
<span style="font-size:14px;"><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></span>
上面用了三个文本框,每一个都用不同的颜色,它们用不同的方式处理了文本太长的问题。
红色文本框使用LineBreak标记在指定的位置换行。它给了你绝对的控制权,能做到随时切换到新行。但是很多情况下却不适用。如果用户把窗口拉大,文本仍在原来的位置换行,即使有足够的空间把整个文本一行显示。
绿色文本框使用TextTrimming属性赋值为CharacterEllipsis,当文本无法显示全的时候显示为省略号。这很好的显示了文本很长但是不够显示完整。如果你有很长的文本但是不想显示多行,那么这是一个很好的方法。另外你还可能用到WordEllipsis,它以单词为单元进行省略,而不是以字母,防止一个单词只显示部分。
蓝色文本框使用TextWrapping属性赋值为Wrap,它能让文本自动换行。与第一种手动切换相比,它是完全自动的。它还能随着空间的改变而自动调整。通过拉大或缩小窗口,你会发现自动换行发挥完美。
用文本框处理简单的字符串就讲这么多。下一章我们将探寻文本框的更深一层的功能,如创建各种样式的文本等等。