WPF教程(十六)标签控件

来源:互联网 发布:分布式数据库的优势 编辑:程序博客网 时间:2024/06/06 07:27

标签控件其实和文本框长得很像。但是,标签除了文本属性,还有一个内容属性。就因为这一点,标签除了容纳文本之外,可以容纳各种控件。标签的内容可以是字符串,如下:

<span style="font-size:14px;"><Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlSample"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        Title="LabelControlSample" Height="100" Width="200">    <Grid>                <Label Content="This is a Label control." />        </Grid></Window></span>
A simple Label control

有没有注意到另外一个细节?标签默认情况下就有边框留空,这样文本会显示在离左上角稍微一点距离的地方。这个在文本框可没有,你必须手动设置。

这个例子可以看到,如果标签内容是一个字符串,那么标签就会自动生成一个文本框来显示文本。

标签 vs. 文本框

下面我们来对比一下标签和文本框。最明显的区别是文本框只能显示一条文本字符串,而标签可以进行如下操作:

  • 定义边界
  • 显示其他控件,如图片
  • 通过ContentTemplate属性来使用模板
  • 使用访问键将焦点集中于相关控件

最后一条其实是使用标签而不用文本框的最主要原因。如果你只是要显示一条文本,那么还是用文本框为好,因为它更轻巧更好用。

标签和快捷键

在Windows和其他操作系统中,通常你可以用组合键来访问控件,按住[Alt]键,然后按下对应于该控件的字母键,就可以了。当你按住[Alt]键时,字母键会高亮显示。文本框不支持这个功能,而标签可以,所以这个标签就非常有用了。

<span style="font-size:14px;"><Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlSample"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        Title="LabelControlSample" Height="180" Width="250">        <StackPanel Margin="10">                <Label Content="_Name:" Target="{Binding ElementName=txtName}" />                <TextBox Name="txtName" />                <Label Content="_Mail:" Target="{Binding ElementName=txtMail}" />                <TextBox Name="txtMail" />        </StackPanel></Window></span>
Label controls using access keys

界面显示的是你按下[Alt]键时的情景,会出现一条下划线。尝试按下[Alt]键,然后按N和M,你会发现光标是如何在两个文本框切换的。

来总结一下:首先,我们通过在字母前面加一条下划线来定义快捷键,不一定必须是首字母,任何位置的字母都可以。一般都是使用首字母作为快捷键,当然,这个字母在其他控件那里没有被用过。其次,我们使用Target属性来把所需要的控件绑定到标签。我们使用标准的WPF绑定,通过一个ElementName属性。这些在以后会讲到。绑定是基于控件名字的,一旦控件名字变了,那么绑定的地方一定要记得修改。

控件作为标签内容

上面提到,标签可以存放其他控件,而且不影响其他控件的特性。我们来尝试一下,把一张图片和一段文字放到标签里,同时给它们设置快捷键。

<span style="font-size:14px;"><Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlAdvancedSample"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        Title="LabelControlAdvancedSample" Height="180" Width="250">        <StackPanel Margin="10">                <Label Target="{Binding ElementName=txtName}">                        <StackPanel Orientation="Horizontal">                                <Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_green.png" />                                <AccessText Text="_Name:" />                        </StackPanel>                </Label>                <TextBox Name="txtName" />                <Label Target="{Binding ElementName=txtMail}">                        <StackPanel Orientation="Horizontal">                                <Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_blue.png" />                                <AccessText Text="_Mail:" />                        </StackPanel>                </Label>                <TextBox Name="txtMail" />        </StackPanel></Window></span>
Label controls using access keys

这相当于是上面例子的扩展。现在标签里不单单只有文本,而是包含了一张图片和一条文字(在AccessText里我们仍旧可以设置快捷键)。不知道你们有没有注意到,标签里是通过两个水平对齐的StackPanel来实现的,为什么不直接放图片和文字呢?这是因为,和其他ContentControl控件一样,标签只能包含一个子控件。

图片控件使用了一个远程的图片,这只是为了方便例子中的使用,实际应用中最好不用。后面我们会详细讲到。

总结

在大多数情况下,标签如它的名字那样,只是作为一个其他控件的标记。这是它最主要的作用。如果不是这种情况,你最好使用文本框,或者WPF提供的其他文本容器。



0 0
原创粉丝点击