概述

如果你在开发wpf程序,应该听说过The Composite Application Guidance for WPF(以下简称prism)

总而言之,prism是帮助你开发复杂的wpf应用程序的。希望在看完此系列教程以后能对你有所帮助.

从去年正式版发布至今,将近快半年了.silverlight 2正版的推出.prism也开始支持silverlight,而且这次是同时支持wpf和silverlight.这样便统一了wpf和silverlight的编程,代码的移植也更加的方便.现在prism最新的版本是Prism V2 - Drop 8.相对于第一个版本发生了一些变化.本文则基于Prism V2 - Drop 8这个版本进行介绍.如果你还在用7月份的那个版本可以看周银辉写的教程.

以下说明三个最基础的概念.

一.被引导的Windows窗体Shell

wpf程序在启动时,需要一个宿主容器,一般情况下是System.Windows.Window,以下是一个刚创建的窗体.

<Window x:Class="HelloWorldSample.Window1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="Window1" Height="300" Width="300"><Grid></Grid>
</Window>

默认情况下,System.Windows.Application会通过设置StartupUri来运行主窗体.

<Application x:Class="HelloWorldSample.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="Window1.xaml">
</Application>

接着随着prism框架的加入,运行主窗体的方式改变了.因为prism要在窗体运行之前做一堆事情,来为框架可以做的事情做铺垫.所以我们要去掉StartupUri,手动启动窗体. prism通过一个名为Bootstrapper类作为引导程序,这里我们先不管他做了什么,只知道他起了程序的引导作用.

通过Bootstrapper的引导,这个窗体就不再仅仅是一个单纯的窗体了,这个窗体我们也可以称为Shell,也可以理解为一个壳的意思.

二.被附加的内容区域Region

以asp.net中的母版页为例.

我们做网站之前总要先布局,那就得定模板,下图大家应该很熟悉,目的就是以母版页当容器,然后在定义的ContentPlaceHolder区域中塞内容.

一般情况下,定义了母版页以后,必定要其他Page来套用此母版页

这种做法本身很好,用wpf程序来实现也可以实现(可以参考此文),但比较麻烦.web程序与客户端程序有一个本质的区别,web是无状态的,客户端程序就没有这方面的问题.

假设web是有状态的(假设哦),可以以用户控件替代,以aspx页面为母版页,照样定义容器,往里面塞用户控件.

这种做法,现在的ajax程序应该很流行.

回到主题,prism框架通过附加属性的方式给Shell定义自定义区域,标题说是附加的内容区域,如下代码,

通过附加属性的方式给ItemsControl定义了一个Region,ItemsControl就变成这个Region的容器了.

这里的Region与asp.net母版页的ContentPlaceHolder的意义是相同的,只不过实现方式不同罢了.

<Window x:Class="HelloWorldSample.Shell"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:cal="http://www.codeplex.com/CompositeWPF"Title="Composite Application Library Sample" Width="400" Height="300"><ItemsControl cal:RegionManager.RegionName="MainRegion"/>
</Window>

注意:在这里通过RegionManager附加属性RegionName注册的区域的功能,是在该窗体实例化之前,通过Bootstrapper提供的,这就是上面的铺垫作用.

三.被拆分的模块Module

定义好Region内容区域以后,可以在Region中加载不同的模块的用户控件.每个模块都有着不同功能,一个功能强大的应用程序就是由不同的模块组成的.将应用程序的不同功能,拆分成不同的小模块开发,复杂度明显就会降低.

好,到了这里讲明了三个点

1.Shell,主应用程序容器,prism功能的基石

2.Region,我们且称之为内容区域,可以提供各个模块加载所需的视图(即用户控件)

3.Module,程序的组成模块.

有了以上三个概念以后,我们便可以开始prism之旅了,如果你对以上概念还不是很清晰,没有关系。以后会慢慢介绍.已经在用此框架的朋友,发现写错了请指出.下篇让我们一起来探索Region的使用。

Prism V2之旅(1)相关推荐

  1. prism v2之旅(7)

    这篇继续介绍Module的功能. 第5篇已经介绍过模块的一些基本功能了,这篇介绍模块在silverlight的特殊应用. silverlight的项目生成文件是xap文件,其提供了一个非常方便的功能, ...

  2. Silverlight 和WPF的Composite Guidance(Prism V2)发布了

    Microsoft 模式和实施方案小组最近发布了第二个版本的"WPF 复合应用程序指南",这一新指南旨在充分利用 WPF/Silverlight 的功能和编程模型.同时,团队还根据 ...

  3. wpf silverlight开发框架(prism)系列教程

    弄个列表,方便你我,不要问我prism是啥,只要你做wpf or silverlight你就会知道这个东西. Prism V2之旅(1)-prism基本概览 让你了解下,prism里面的一些基本概念 ...

  4. 浅谈MVP与Model-View-ViewModel(MVVM)设计模式

     微软的WPF带来了新的技术体验,如Sliverlight.音频.视频.3D.动画--,这导致了软件UI层更加细节化.可定制化.同时,在技术层面,WPF也带来了诸如Binding.Dependency ...

  5. 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(12月26日-1月1日)

    分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(12月26日-1月1日) 本周Silverlight学习资源更新   vs2010 学习Silverlight学 ...

  6. 【踩坑之旅】-webpack (v4.8.1) + vue-cli (v2.5.3)升级准备

    2019独角兽企业重金招聘Python工程师标准>>> 一.重见天日 error in ./src/App.vue?vue&type=style&index=0&am ...

  7. 我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承...

    当今的IT领域,SOA已经成为了一个非常时髦的词,对SOA风靡的程度已经让很多人对SOA,对面向服务产生误解.其中很大一部分人甚至认为面向服务将是面向对象的终结,现在的面向对象将会被面向服务完全代替. ...

  8. C#发现之旅第十四讲 基于动态编译的VB.NET脚本引擎

    本章说明 在前面章节中,笔者使用了反射和动态编译技术实现了快速ORM框架,在本章中笔者将继续使用这些技术来实现一个VB.NET的脚本引擎,使得人们在开发中能实现类似MS Office那样实现VBA宏的 ...

  9. LINKs: Xamarin.Forms + Prism

    LINK 1 - How to use Prism with Xamarin.Forms http://brianlagunas.com/first-look-at-the-prism-for-xam ...

最新文章

  1. 获取线程结束代码(Exit Code)
  2. linux端口监听命令
  3. python字频统计软件_python结巴分词以及词频统计实例
  4. HDU 3094 树上删边 NIM变形
  5. --4、实验室设备管理(表)
  6. Oracle数据库的备份与恢复技术
  7. Rust是如何实现内存安全的--理解RAII/所有权机制/智能指针/引用
  8. Unity 检测物体是否在相机视野范围内
  9. 高级I/O-----dup/dup2
  10. 黑马程序员SpringBoot2全套教程学习笔记
  11. 关于H5调用摄像头麦克风的权限问题
  12. 无线射频识别的应用方案有哪些?
  13. 【STM32H7的DSP教程】第48章 STM32H7的中值滤波器实现,适合噪声和脉冲过滤(支持逐个数据的实时滤波)
  14. Java 实现树结构计算各个节点数的和
  15. 在MAC上如何隐藏文件夹以及查看隐藏文件
  16. 奇技淫巧之dummy网卡
  17. chapter1 静态分析技术-09资源节查看 resource hacker
  18. python中一般使用几个空格表示缩进_python中使用空格还是使用 Tab键缩进的建议...
  19. 为OpenStack量身打造 OVS推出全新OVN项目
  20. 电脑生成永久二维码怎么弄的?二维码图案不变怎么改内容?

热门文章

  1. 《数学之美》第12章 有限状态机—地图与本地搜索的核心技术
  2. Xmanager7如何通过SSH连接远程服务器
  3. new_zeros()函数的作用
  4. 因果表征学习最新综述:连接因果科学和机器学习的桥梁
  5. 中国科学院院士褚君浩:第四次工业革命和智能时代
  6. 鸿蒙系统全面解析,诞生背景、技术细节生态圈一文看懂
  7. 【技术趋势】德勤发布2020技术趋势报告,五个新趋势可引发颠覆性变革
  8. 比尔盖茨NEJM发文:新冠肺炎是百年一遇的流行病!全世界应该如何应对?
  9. 存内计算能否成为下一代AI芯片的关键
  10. 二十大未来最有潜力的新材料(绝对经典值得收藏)