初识WPF
VS中项目目录
- Properties:里面主要放一些用到资源如图片等
- References:引用了哪些项目或者哪些类库
- App.xaml:程序主体,声明了主窗体是谁,类似于winform下program.cs文件。该分支下还有一个App.xaml.cs文件,这是后台代码
- MainWindow.xaml:主窗口
剖析XAML代码
XAML由XML派生而来,很多XML中的概念都可以直接使用。
- 非空标签
<Tag Attribute=value>content</Tag> - 空标签
<Tag Attribute=value/>
XAML是一种声明式语言,一个标签就代表一个对象,对象之间可以是并列或者包含。
一般将标签式语言中的标签特征—“名称=值”—称作是Attribute,但如果使用该标签语言进行面向对象编程时,面向对象中的Property很容易与之混淆。实际上,标签的Attribute只是和对象的Property做了一个映射。一般标签的Attribute要多于它所代表对象的Property。
<!--这些都是Window的Attribute-->
<Window x:Class="WpfApp2.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"
xmlns:local="clr-namespace:WpfApp2"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800"> <!--和Window对象的属性相对应-->
<Grid>
</Grid>
</Window>
XAML语言使用xmlns来定义名称空间xmlns[:可选的映射前缀(名称空间别名)]="名称空间"。没有映射前缀的名称空间为默认名称空间,只能有一个,应把最常用的名称空间设置为默认名称空间。
上面案例中,<Window>和<Grid>都是来自默认的名称空间,第一行中x:Class则来自第三行中x前缀对应的名称空间。
案例:如果把第二行中的xmlns改为xmlns:n则需要将代码改为这样才行
<n:Window x:Class="WpfApp2.MainWindow"
xmlns:n="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
...
<n:Grid>
<n:/Grid>
<n:/Window>
XAML引用外来程序集: 1.添加对程序集的应用(与winform一样)2.在根元素起始标签上增加xmlns:x="clr-namespase:System.Windows.Controls; assembly=PresentationFramework"(这类似于C#使用using引用名称空间)
案例中默认引入的像链接一样的东西其实是XAML解析器的硬编码,代表着引入一系列程序集。winfx/2006/xaml/presentation对应绘制UI的程序集,winfx/2006/xaml对应着跟XAML编译有关的程序集。
x:Class="WpfApp2.MainWindow"x:说明该Attribute来自于x映射的命名空间。Class的作用是XAML解析器将标签解析成C#类后,这个类的类名是什么。
APP.xaml中StartupUri="MainWindow.xaml"表示启动窗体为MainWindow窗体。
思考
MainWindow.xaml中x:Class后面指定的类名和Mainwindow.xaml.cs中的类名是什么关系呢?
其实如果x:Class后面的类名和Mainwindow.xaml.cs不同,且将Mainwindow.xaml.cs中的InitializeComponent();注释掉,程序也可以展现出MainWindow.xaml设计的界面,因为APP.xaml中指定了StartupUri="MainWindow.xaml",只要是MainWindow.xaml是一个可执行的界面就可以运行展示。但不建议这样做的原因是如果两个类名不同,则在Mainwindow.xaml.cs中就不能使用xaml中所定义的组件(因为不是一个类),这样就不能实现前后端分离的目的。
WPF基础入门与XAML解析
336

被折叠的 条评论
为什么被折叠?



