最近因为工作可能会变动的原因,决定把WPF的知识先储备一波。前面先是一些理论的东西,真·笔记。
WPF和Winform 都是微软的开源win桌面开发UI框架。源码地址:https://github.com/dotnet/wpf 后面可能用得着。可以先下载看看。
先看看这两个的区别:
Winform:User32\GUI , 事件驱动
WPF:08年正式 (Framework 3.0),数据驱动,MVVM(这个后面要详细看看)。
支持矢量图形(www.iconfont.cn)
基于DirectX,硬件好会很快,如果硬件不行,需要 通过 RenderCapablity.Tier 这个方法来获取下硬件加速等级。
//等级 0 ,1,2
int i = (RenderCapability.Tier >> 16);//2
分辨率无关,多点触控支持。
WPF体系结构, 正好被问到过,之前我值看到了control,今天F12到底了,来整理下。
其实这个文章已经讲的蛮好的了,我参考下,加一些自己的理解:https://blog.csdn.net/yinweimumu/article/details/80580059
abstract class DispatcherObject | Dispatcher的作用是用于管理线程工作项队列,类似于Win32中的消息队列,Dispatcher的内部函数,仍然调用了传统的创建窗口类,创建窗口,建立消息泵等操作。 |
class DependencyObject | 这个类我们熟悉呀,我们的依赖都是它。
|
abstract class Visual | 绘图对象 - WPF所有看到的页面元素应该都是它 |
class UIElement | UIElement 是 WPF 核心级实现的基类, 布局,输入,焦点,事件;路由事件 |
class FrameworkElement | 基于由UIElement定义的 WPF 核心级 API 构建。 |
FrameworkElement:Shape | Line,Path |
FrameworkElement:Panel | |
FrameworkElement:Control | TextBlock:FrameworkElement 这货跳过了Control |
Control:ContentControl | 单一内容,一层只能有一个 content |
Control:ItemsControl |
下面具体的控件,后面再一个个单独拎出来看。刚学习嘛,就看个大方向。
然后WPF还有个不一样的地方就是页面是xaml。
<Application x:Class="WpfApp1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
<Window x:Class="WpfApp1.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:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
</Grid>
</Window>
多了一些固定的代码,其实也没啥可看。类似于XML的格式,理解起来也不算很难。好像说是为了前后端分离设计的来着,不过看上去让前端去写这个好像也不太现实。
页面呈现,一般可以通过逻辑树(vs自带的 文档大纲)看页面元素,或者视觉树 来看详情(通过 SNOOP)。
最后呢,我这边会再core环境下建WPF项目,目前看来和Framework环境下没啥区别。