标签控件其实和文本框长得很像。但是,标签除了文本属性,还有一个内容属性。就因为这一点,标签除了容纳文本之外,可以容纳各种控件。标签的内容可以是字符串,如下:
<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">
<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提供的其他文本容器。
标签控件其实和文本框长得很像。但是,标签除了文本属性,还有一个内容属性。就因为这一点,标签除了容纳文本之外,可以容纳各种控件。标签的内容可以是字符串,如下:<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlSample" xmlns="http://schemas.microsoft.com/winfx
数字墨迹: SaveFileDialog和 InkPresenter
文档:DocumentViewer、FlowDocumentPageViewer、FlowDocumentReader、 FlowDocumentScrollViewer 和 StickyNoteControl
输入:TextBox、RichTextBox 和 PasswordB..
form:指放表单
控件
的区域。
里面可以嵌套其他属性,acion=“接口地址”,method=“gtt/post”
name=“表单名称” 主要添加表单的
标签
;
属性:type= “text” 文本框 type=“password” 密码框
type=“submit” 提交按钮 type=“reset” 重置按钮
标签
扩展作为XAML对象赋值的一种方式,也是十分重要的一种方式,对于需要获取其他文件的Data,
标签
扩展提供了很多方式
文章目录BindingStaticResorceTemplateBindingRelativeSource
Binding
Binding(XAML载入时,将数据绑定到XAML对象),语法结构示例: <Button x:Name="bindingbtn" Width="100"/>
<Button Width="{Binding ElementName=bindi.
在
WPF
中x:Name是XAML的声明
标签
,一个XAML
标签
会对应着一个对象,这个对象一般是
控件
类的实例。XAML
标签
只负责声明对象而不声明引用对象。如果需要为对象准备一个引用变量以便在
C#
中直接访问的话就就可以使用x:Name
标签
了 。
x:Name
标签
的作用:
1、 告诉XAML编译器,当一个
标签
带有x:Name时处理对这个
标签
生成对应实例外还要为这个实例声明一个引用变量,变量名就是x:Nam...
目录重要的H
标签
主要
标签
h系列
标签
主要用来做标题。h1到h6 依次缩小。p
标签
:段落。div
标签
:表示大的容器。span:放一些文本。a
标签
:超链接。img
标签
:增加背景图片块级
标签
和行内
标签
重要的H
标签
主要
标签
h系列
标签
主要用来做标题。h1到h6 依次缩小。
<!DOCTYPE html>
<meta charset="UTF-8">
<title></title>
</head&g
2. 定义行和列
在Grid
控件
中,可以通过定义行和列来确定UI元素的位置。要定义行和列,请使用Grid.RowDefinitions和Grid.ColumnDefinitions属性。以下是一个例子:
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<!-- UI元素将被添加到此处 -->
</Grid>
在这个例子中,我们定义了两个行,第一个行的高度是Auto,第二个行的高度是*,这意味着它会占据Grid
控件
中剩余的空间。我们还定义了两列,第一列的宽度是*,第二列的宽度是Auto,这意味着第一列将占据Grid
控件
的大部分空间,第二列将占据其余空间。
3. 添加UI元素
要向Grid
控件
添加UI元素,请将它们放在Grid中,并为它们指定Grid.Row和Grid.Column属性。例如,以下代码向刚刚定义的Grid
控件
中添加了两个Button:
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Button Grid.Row="0" Grid.Column="0" Content="Button 1" />
<Button Grid.Row="0" Grid.Column="1" Content="Button 2" />
</Grid>
在这个例子中,第一个Button位于第一个行的第一个列,第二个Button位于第一个行的第二列。
4. 合并行和列
在Grid
控件
中,可以合并相邻的行或列,以创建更复杂的布局。要合并行或列,请将多个UI元素的Grid.RowSpan或Grid.ColumnSpan属性设置为相同的值。例如,以下代码创建了一个跨越两行的TextBox:
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" />
<Button Grid.Row="1" Grid.Column