1.初识WPF
初识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。
1 | <!--这些都是Window的Attribute--> |
XAML语言使用xmlns来定义名称空间xmlns[:可选的映射前缀(名称空间别名)]="名称空间"
。没有映射前缀的名称空间为默认名称空间,只能有一个,应把最常用的名称空间设置为默认名称空间。
上面案例中,<Window>
和<Grid>
都是来自默认的名称空间,第一行中x:Class则来自第三行中x前缀对应的名称空间。
案例:如果把第二行中的xmlns改为xmlns:n则需要将代码改为这样才行
1 | <n:Window x:Class="WpfApp2.MainWindow" |
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中所定义的组件(因为不是一个类),这样就不能实现前后端分离的目的。