首先我们还是新建一个空项目,看一下VS给我们默认生成的xaml结构。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
</Grid>
</Window>
一:xaml简述
1:x:Class
2:xmlns
导入命名空间用的
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"其实也就导入了如下4个wpf开发必备的dll,这个命名空间也是xaml中默认的命名空间。
3:xmlns:x
如果我们需要导入一些自定义的命名空间,那么我们就需要加上用“: + 自定义名称”的形式,这里微软导入了一个自定义的命名空间。
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"下面我们也来导入一个命名空间,实际开发中我们当然我们不会做成url的形式,这里我就取名为sys前缀
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System.IO;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Grid>
</Grid>
</Window>
二:xaml中扩展标记
扩展标记分为两种:wpf级别和xaml级别。
<1> wpf级别扩展标记
①: StaticResource
用于获取资源的值,值获取在xaml编译的时候完成,什么意思呢?先举个例子。
首先,我们发现有一个window.Resources,这东西我们可以认为是在MainWindow类中定义的全局变量,这里我就定义个name=“一线码农”的
变量,那么textblock获取变量的方式就可以通过StaticResource。
②:DynamicResource
跟StaticResource唯一不同的是,它是在运行时获取的,如果大家知道C#里面的dynamic关键字,我想就不用解释了,上代码。
③:Binding
还是在webform中找一下关键字吧,相当于webform中的Eval,上代码说话。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox Height="23" Margin="87,75,0,0" Name="textBox1" Width="120" />
<TextBox Height="23" Margin="87,126,0,0" Name="textBox2" Width="120"
Text="{Binding ElementName=textBox1, Path=Text}" />
</Grid>
</Window>
这里我把textbox2的text绑定到了textbox1的text上,最后的效果就是我在textbox1上输入,textbox2也会相应的变化,很有意思。
④:TemplateBinding
这个被称为模板绑定,可以把对象的属性和模板的属性绑定起来,详细的介绍放在后续文章中。
<2>xaml级别扩展标记
① x:Type
将模板或者样式指定在哪一种对象上时需要用type指定。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Background" Value="Red"/>
</Style>
</Window.Resources>
<Grid>
<TextBox Height="23"
Margin="87,75,0,0" Name="textBox1" Width="120" />
</Grid>
</Window>
如这里我定义的css样式,将background=red指定到textbox控件上。
②:x:Static
主要用于在xaml中获取某个对象的静态值,上代码说话。
namespace WpfApplication1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public static string name = "一线码农";
public MainWindow()
{
InitializeComponent();
}
}
}
xaml代码:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox Height="23" Text="{x:Static local:MainWindow.name}"
Margin="87,75,0,0" Name="textBox1" Width="120" />
</Grid>
</Window>
最后效果:
③:x:null
这个就比较简单了,xaml中某某控件设为null就靠它了。
1 <Grid> 2 <TextBox Height="23" Text="{x:Null}" 3 Margin="87,75,0,0" Name="textBox1" Width="120" /> 4 </Grid>
④:x:Array
这个主要就是在xaml中创建数组,还是举个例子。