WPF简介

Windows Presentation Foundation(WPF)是微软新一代图形系统,运行在.NET Framework 3.0架构下,为用户界面、2D/3D 图形、文档和媒体提供了统一的描述和操作方法。基于DirectX 9/10技术的WPF不仅带来了前所未有的3D界面,而且其图形向量渲染引擎也大大改进了传统的2D界面,比如Vista中的半透明效果的窗体等都得益于 WPF。微软还提供了专门的界面开发语言XAML(Extensible Application Markup Language,可扩展应用程序标记语言),使得界面描述代码和程序代码得以分开,从而提高了开发效率并有利于团队开发。

Windows Presentation Foundation https://msdn.microsoft.com/zh-cn/library/ms754130(v=vs.110).aspx

WPF中的一些重要组件

WPF使用多层体系结构。在顶层,应用程序与完全由托管C#代码编写的一组高层服务进行交互。

  • PresentationFramework.dll包含WPF顶层的类型,包括哪些表示窗口、面板以及其他类型控件的类型。它还是想高层编程抽象,如样式。
  • PresentationCore.dll包含了基础类型,如UIElement类和Visual类,所有形状类和控件都继承自这两个类。
  • WindowsBase.dll包含了更多的基本要素,如DispatcherObject类和DependencyObject类,这两个类引入了依赖属性。
  • milcore.dll是WPF渲染系统的核心,也是媒体集成层(Media Integration Layer,MIL)的基础。其合成引擎将可视化元素转换为Driect3D所期望的三角形和纹理。
  • WindowsCodecs.dll是一套提供图像支持的低级API,例如处理、显示以及缩放位图和JPEG图像。
  • Direct3D是一套低级API,WPF应用程序中的所有图形都由它进行渲染。
  • User32用于解决哪些程序实际占有桌面的哪一部分。但在WPF中,它不负责渲染通用控件

类层次结构

WPF核心命名空间以System.Windows开头(如System.Windows、System.Windows.Controls、....)。下图为WPF中比较重要的几个类。

【System.Threading.DispatcherObject】

WPF应用程序使用单线程(STA)模型,整个用户界面由单个线程拥有,即从另一个线程与用户界面元素进行交互是不安全的。通过继承DispatcherObject类,用户界面中的每个元素都可以检查代码是否在正确的线程上运行,并能通过访问调度程序为用用户界面线程封送代码。

【System.Windows.DependencyObject】

在WPF中,主要是通过属性和屏幕上的元素进行交互。通过继承DependencyObject类,WPF类可获得对依赖项属性的支持

【System.Windows.Media.Visual】

在WPF窗口中显示的每个元素本质上都是Visual对象。可将Visual类视为绘图对象,其中封装了绘图指令、如何执行绘图的附加细节(如透明度、剪裁以及变换设置)以及基本功能(如命中测试)。任何继承自Visual的类都能够在窗口中显示出来。

【System.Windows.UIElement】

UIElement类增加了对WPF本质特征的支持,如焦点、布局、输入和事件。

【System.Windows.FrameworkElement】

FrameworkElement类实现了一些全部由UIElement类定义的成员。如UIElement为布局设置了基础,FrameworkElement类提供了支持它的重要属性(如Margin、HorizontalAlignment)

【System.Windows.Controls.Control】

Control与用户进行交互的元素。

【System.Windows.Controls.ContentControl】

ContentControl类是所有具有单一内容的控件的基类。

【System.Windows.Controls.ItemsControl】

ItemsControl类是所有显示选项集合的控件的基类。如ListBox、TreeView...

【System.Windows.Controls.Panel】

Panel类是所有布局容器的基类。

WPF编程宝典 https://book.douban.com/subject/25785318/

WPF编程-WPF体系结构的更多相关文章

  1. WPF编程之找不到资源mainWindow.xaml

    原文: WPF编程之找不到资源“window1.xaml”之谜 因为将启动窗口移动到了一个新建的文件夹中,启动调试时报找不到资源mainWindow.xaml,原来是App.xaml里面设置的启动窗口 ...

  2. WPF编程,获取句柄将外部程序嵌入到WPF界面。

    原文:WPF编程,获取句柄将外部程序嵌入到WPF界面. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/details ...

  3. WPF编程 ,TextBlock 显示百分数值的一种简单方法。

    原文:WPF编程 ,TextBlock 显示百分数值的一种简单方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/ ...

  4. WPF编程,通过Double Animation动态旋转控件的一种方法。

    原文:WPF编程,通过Double Animation动态旋转控件的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/art ...

  5. WPF编程,通过Double Animation动态更改控件属性的一种方法。

    原文:WPF编程,通过Double Animation动态更改控件属性的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/a ...

  6. WPF编程,通过【帧】动态更改控件属性的一种方法。

    原文:WPF编程,通过[帧]动态更改控件属性的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/detail ...

  7. WPF编程,通过Double Animation同时动态缩放和旋转控件的一种方法。

    原文:WPF编程,通过Double Animation同时动态缩放和旋转控件的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_4330793 ...

  8. WPF编程,通过Double Animation动态缩放控件的一种方法。

    原文:WPF编程,通过Double Animation动态缩放控件的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/art ...

  9. WPF编程,TextBlock中的文字修饰线(上划线,中划线,基线与下划线)的使用方法。

    原文:WPF编程,TextBlock中的文字修饰线(上划线,中划线,基线与下划线)的使用方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_4330 ...

随机推荐

  1. Docker - 访问仓库

    仓库与注册服务器 仓库(Repository)集中存放镜像的项目或目录. 注册服务器(Registry)管理仓库的服务器,服务器上可以有多个仓库,每个仓库有多个镜像. 例如:在仓库地址docker.i ...

  2. (1)使用bash脚本实现批量添加用户

    脚本实现内容: 可以指定用户名前缀,指定添加数量的批量添加用户脚本,密码为10为随机小写字母,并把用户名和密码写入文件中. 脚本代码: #!/bin/bashread -p "用户名前缀:& ...

  3. hdu4681 String DP(2013多校第8场)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 思路: 我是胡搞过的 就是先预处理出(i,j)的正向的最大连续子串和逆向最大连续子串 然后对于A ...

  4. Asp.net mvc 小试牛刀一:多语言支持

    最近因为项目需要又从UWP开发转到了Asp.net mvc 开发,由于也不是什么老手,所以就将项目常见的一些技术问题记录一下自己的解决方案. 第一个需求:用户可以自由切换界面显示语言. 解决方案一:界 ...

  5. .Net程序猿需掌握的知识

    作为一个.Net的技术人员需要掌握的技术,当然,理解这些知识点并不能让你学会.NET开发. 但能够衡量你是否有着走出校门的能力,也算是给自己留一个知识的储备库吧. 共勉! 基础知识: 数据类型 变量 ...

  6. 《高性能javascript》 --- in case of odd number of items(奇怪的条目的数量)

    不知道是做着故意放的还是什么原因.总之运行后就会出现问题(奇怪的条目的数量) function merge(left, right){ var result = []; while (left.len ...

  7. Windows 自动获取IP脚本

    @echo off echo 正在自动获取IP地址.... set 连接名称=以太网 netsh interface ip set address name = "%连接名称%" ...

  8. 【转】HTTP长连接与短连接(2)

    一.什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待 ...

  9. SVN如何迁移到Git?

    最近在使用华为软件开发云进行开发项目管理,目前华为软件开发云支持500M的免费项目空间,而且还可以在线编译和构建,不用担心开发环境和生产环境的不同,很好的体现了DevOps的开发理念. 之前一直是用s ...

  10. Creating beautiful charts in chinese with ggplot2

    Before we start My chinese skills are poor and biased. I did learn during my internship and I contin ...