一.XMAL的简单了解
XAML读做zaml,,它是WPF中专门用于设计UI的语言,它简单易懂,结构清晰。是一种声明式语言,当你见到一个标签时,就意味着声明了一个对象;对象之间的层级关系要么是并列,要么是包含,全都体现在标签的关系上。 它的出现带来以下几点优势:
(1)无论是软件的功能还是UI设计有所变化导致bug的出现,都不会导致大量代码的修改。
(2)会让逻辑代码更容易理解
(3)它能够使视图(UI)与逻辑代码的分离,实现一种“高内聚低耦合”的结构。
二.新建WPF项目
以上是项目文件中包含的内容
下面简单介绍一下这些分支都是用于做什么的
(1)Properties:它的内容主要是程序需要的一些图标,图片,静态字符串和配置信息。
(2)References(引用):标记了当前项目中引用了哪些其他的项目,里面都是.NET Framewok中的类库。
(3)App.xml:程序的主体,App.xml文件的作用就是声明了程序的进程会是谁,同时指定了程序的主窗体是谁,它还有一个文件——App.xml.cs,它是App.xml的后台代码
(4)MainWindow.xml:程序的主窗体。
三.最简单的XAML代码
<Window x:Class="MyFirstWpf.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>
可以在XMAL文件的标签上使用xmlns特征来定义名称空间(Namespace),xmlns也就是XML-Namespace的缩写,其语法如:xmlns[:可选的映射前缀]="名称空间";xmlns后可以跟一个可选的映射前缀,之间用冒号分隔。如果没有
写可选映射前缀,那就意味这所有来自这个名称空间的标签前都不用加前缀,这个没有映射前缀的名称空间称为“默认名称空间”——默认名称空间只能有一个,上面的XAML代码中,<Window>和<Grid>都来自由第二行声明的默认空间
而第一行中的Class特征则来自于第三行中的x:前缀对应的名称空间。如果给第二行声明的名称空间加上一个前缀,比如N,那么XAML代码就必须改成这样才能编译通过:
<N:Window x:Class="MyFirstWpf.MainWindow" xmlns:N="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <N:Grid> </N:Grid> </N:Window>
另外,xmlns= "http://schemas.microsoft.com/winfx/2006/xaml/presentation"对应的是与绘制UI相关的程序集;
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"对应的是XAML语言解析处理相关的程序集。
为了表示同类标签中某个标签的与众不同,可以给它的特征(Attribute)赋值,为特征赋值的语法如下:
<Tag Attribute1=Value1 Attribute2=Value2>
另外需要了解Attribute和Property的区别
(1).Property属于面向对象的,在使用面向对象的思想时,则需要把客观事物进行抽象,再把抽象出来的结果封装成类,类中用来表示事物状态的成员就是Property。
(2).Attribute则是编程语言文法上的,打个比喻来说;如果有两个同类的语法元素A和B,为了区分它们,那么这个时候则需要针对A和B加一些Attribute,也就是说Attribute只与语言层面上的东西相关,与抽象出来的对象没啥关系。
因为Attribute是为了表示区分的,所以把它称为“特征”。
四.XML文件中导入程序集和引用其中的名称空间
假设我的类库程序集名为MyLibrary.dll,其中包括Common和Controls两个名称空间,而且已经把这个程序集引用进WPF项目,那么在XAML中引用其中的名称空间的方法是:
xmlns:映射名=“clr-namespace:类库中名称空间的名字;assembly=类库文件名”
对于MyLibrary.dll里的两个名称空间,XAML中的引用会是:
xmlns:commom="clr-namespace:Common;assembly=MyLibrary"
xmlns:controls="clr-namespace:Controls;assembly=MyLibrary"
如果要使用Common和Conyrols中的类,则代码是这样的
<common:MessagePanel x:Name="window1">
<controls:LedButton x:Name="button">