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>
有没有注意到另外一个细节?标签默认情况下就有边框留空,这样文本会显示在离左上角稍微一点距离的地方。这个在文本框可没有,你必须手动设置。
这个例子可以看到,如果标签内容是一个字符串,那么标签就会自动生成一个文本框来显示文本。
标签 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>
界面显示的是你按下[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>
这相当于是上面例子的扩展。现在标签里不单单只有文本,而是包含了一张图片和一条文字(在AccessText里我们仍旧可以设置快捷键)。不知道你们有没有注意到,标签里是通过两个水平对齐的StackPanel来实现的,为什么不直接放图片和文字呢?这是因为,和其他ContentControl控件一样,标签只能包含一个子控件。
图片控件使用了一个远程的图片,这只是为了方便例子中的使用,实际应用中最好不用。后面我们会详细讲到。
总结
在大多数情况下,标签如它的名字那样,只是作为一个其他控件的标记。这是它最主要的作用。如果不是这种情况,你最好使用文本框,或者WPF提供的其他文本容器。
- WPF教程(十六)标签控件
- WPF教程(二十六)StackPanel
- WPF简单教程:控件ViewBox
- NeHe OpenGL教程 (十六)
- Android实战简易教程-第四十六枪(自定义控件体验之罗盘)
- Html5系列(二十六) 布局标签
- WPF教程(一) WPF是什么?
- WPF教程(二) WPF vs WinForms
- WPF教程(四) Hello,WPF!
- WPF教程(八)WPF应用简介
- WPF教程(十三)WPF异常处理
- 【WPF】Viewbox标签——控件大小适应父容器
- NeHe OpenGL教程 (二十六)
- c++教程(十六:Other data types)
- ROS教程(十六):roswtf入门
- Golang教程:(十六)结构体
- WPF控件篇(二)
- WPF教程(九)窗体
- poj 2488 A Knight's Journey (dfs)
- 【文件】关于文件的复制函数
- C#异步编程之浅谈Task
- modelsim quick start
- sizeof运算符与求字符串长度函数strlen的区别
- WPF教程(十六)标签控件
- 类与对象的使用2
- mac-os use apt-get or yum
- java学习
- vs2013+opencv配置
- GITHUB自学系列之五「GIT 进阶」
- 并查集
- 《锋利的jQuery》第四章、 jQuery中的事件和动画
- js的异步加载(requirejs)