NET WPF之XAML语言
一、XAML 的根元素
通常XAML的根元素有两个:一个是Window,说明这是一个桌面应用程序;另一个是Page,主要用在互联网应用程序,也就是网页。
1.1 XAML桌面应用程序
<Window x:Class="WPFTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Height="300" Width="600" Background="FF4B4A4A"
Title="XAML桌面应用程序">
<Border>
</Border>
</Window>
1.2 XAML网页应用程序
<Page x:Class="WPFTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Height="300" Width="600" Background="FF4B4A4A"
Title="XAML网页应用程序">
<Border>
</Border>
</Page>
二者区别只是根元素不同
二、XAML 和代码分离技术
WPF 应用程序一般由两部分组成,一部分是 XMAL 描述 UI 元素在界面上的位置,大小等,另一部分用来处理程序的逻辑、对传递事件的反应等等。一个是.xmal
文件,另一个是.cs
文件。
三、相关属性 & 附加属性
3.1 相关属性的概念
XAML 中元素的属性大部分为相关属性,例如:
<TextBox Text="相关属性"/>
<TextBox>
<TextBox.Text>相关属性</TextBox.Text>
</TextBox>
这里面的Text就是TextBox的相关属性。
3.2 附加属性的概念
例如:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="70"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TexBox Grid.Row="0" Grid.Column="0"/>
<Button Grid.Row="1" Grid.Column="1"/>
</Grid>
Grid 中的 Column 和 Row 都是附加属性。Grid中的控件在说明其位置时,直接设置该附加属性。写法如上面的 XAML ,TextBox和 Button 并不含有 Grid.Row 或 Grid.Column 属性,却可以很方便地应用 Grid 中的附加属性。
四、XAML 标记扩展
在 XAML 里引用静态或者动态对象实例,或在 XAML 中创建带有参数的类,需要用到 XAML 扩展,扩展常用来设定属性值。
标记扩展本身是一系列类,其基类为 MarkupExtension,这是一个抽象类。从这个类中派生出十二个类:
ResourseKey、BindingBase、StaticResourceExtension、RelativeSourse、TemplateBindingExtension、DynamicResourceExtension、ColorConvertedBitmapExtension、ThemeDictionaryExtension、StaticExtension
、TypeExtension、ArrayExtension、NullExtension
这些标记扩张可分为两大类:
-
WPF 标记扩展:StaticResource、 DynamicResource、 Binding、 RelativeSource 、 TemplateBinding
-
XAML 标记扩展:x:Type、x:Static、x:nul、 x:Array
在语法上,XAML使用大括号"{ }"来表示扩展。
必要时,你也可以使用自己的扩展,其方法是从 MarkupExtension 中派生出你自己的标记扩展类,并覆盖基类中的 ProvideValue 方法。