分享一个漂亮WPF界面框架创作过程及其源码

本文会作为一个系列,分为以下部分来介绍:

(1)见识一下这个界面框架;

(2)界面框架如何进行开发;

(3)辅助开发支持:Demo、模板、VsPackage制作。

框架源码如下所示。

本文介绍第(1)部分。

1 安装

现在我们就先来见识一下这个界面框架。首先,你可以通过以下链接来下载到这个框架的VS插件安装包:下载地址。下载解压后,文件如下:

双击这个文件,进行安装(目前只支持VS2012和VS2013,抛弃了VS2010,I am sorry)。

点击安装,即可完成。

2 创建主程序

接着打开Visual Studio 2013,新建项目,选择默认iOpenWorksExtension。

这里面有两个模板,一个是主程序、一个是插件。在这里,我们先创建一个主程序,你可以发现主程序已经包含了一些通用的功能插件,比如界面框架、配置服务、数据库服务、权限管理等。在编译主程序之前,需要确保已经安装了iOpenWorksSDK和Nuget。

这里编译时需要OSGi.NET框架支持,并使用Nuget去下载一些第三方库。编译通过后,可以直接运行主程序。

首先是一个SplashWindow。

接着是一个Login窗体,输入默认管理员admin/admin。

登录成功后,显示如下主界面,左边是可扩展导航栏、右边是可扩展显示区域、底下是状态栏,右上角有可扩展的系统菜单。

3 创建插件

接着,我们在项目中来添加一个新建插件。需要注意的是:插件目录必须位于主程序的bin/Plugins目录。

插件创建完成后,其项目结构如下所示。

这是一个使用MVVM架构开发的典型的应用。Model表示数据库模型、DataAccessor表示数据库访问类、ViewModel表示视图模型。接着我们来运行项目。你可以发现界面多了一个功能模块。

插件定义了一个CourseManagementUserControl.xaml页面,当点击“课程管理”菜单时,便在右边显示区域动态展示出来。点击“增加/编辑”时,在右边弹出一个输入框,加载了AddOrEditCourseUserControl.xaml控件。在插件的Manifest.xml文件,你可以看到,插件是通过以下配置将菜单和现实内容注册到界面框架的。

另外,在插件的BundleActivator里面定义了如下服务供插件直接调用。

服务即通用功能,有:

(1)PermissionService权限检测服务:编码方式来判断当前用户是否具有某个权限;

(2)ConfigurationService配置服务:持久化保存界面位置、大小、颜色等个性化信息;

(3)DbConnectionFactoryService数据库连接工厂:获取数据库连接;

(4)MainWindowService主窗体服务:用于关闭当前显示区域和打开/关闭侧边框。

在插件开发过程中,我们可以直接来写模型、数据库访问、视图模型、视图代码,如果需要使用框架功能,你就调用上述4个服务即可,不再需要与任何框架打交道。下面我们可以尝试来添加一个新的XAML页面ContactsManagementUserControl.xaml,并更改Manifest.xml做如下配置。

此时,运行后,新页面便可以加载到内容区域了。

下来就可以在这个页面上根据业务来编写页面显示、ViewModel等代码了。

4 框架体验总结

通过上述简单演示,你可以发现这样的框架有如下好处:

(1)高复用:界面可服用、通用功能可服用;

(2)标准化:每一个插件都是用标准的架构、标准的代码来进行开发,容易维护;

(3)模块化:可以将一个大软件分成不同模块,由不同人开发不同插件来组合;

(4)分层:强制将基础插件与业务插件分为不同层次,不至于出现基础插件调用业务插件的功能;

(5)一致的用户体验:框架提供标准化UI,使整个系统有了一致的展示。

此外,在OSGi.NET基础上,还可以支持动态模块化(动态安装、启动、停止、更新、卸载模块)、自动化部署与更新功能。

时间: 2025-01-18 05:21:16

分享一个漂亮WPF界面框架创作过程及其源码的相关文章

分享一个漂亮的ASP.NET MVC界面框架

本文分享一个插件化的界面框架,该框架提供了用户.角色.权限管理功能,也提供了插件的管理和插件中心.下图是该界面框架的样式(全部源码和原理介绍下一篇分享,推荐越多,源码放的越早,呵呵). 要使用该界面框架,你可以通过以下地址来下载到界面框架的Visual Studio 2013模板:下载框架模板. 模板下载地址:http://files.cnblogs.com/baihmpgy/iOpenWorksMvc1.zip 下载后,解压缩,将iOpenWorksMvc1目录直接拷贝到VS的项目模板目录(C

准备.Net转前端开发-WPF界面框架那些事,值得珍藏的8个问题

题外话 不出意外,本片内容应该是最后一篇关于.Net技术的博客,做.Net的伙伴们忽喷忽喷..Net挺好的,微软最近在跨平台方面搞的水深火热,更新也比较频繁,而且博客园的很多大牛也写的有跨平台相关技术的博客.做.Net开发块五年时间,个人没本事,没做出啥成绩.想象偶像梅球王,年龄都差不多,为啥差别就这么大.不甘平庸,想趁机会挑战下其他方面的技术,正好有一个机会转前段开发. 对于目前正在从事或者工作中会用到WPF技术开发的伙伴,此片内容不得不收藏,本片介绍的八个问题都是在WPF开发工作中经常使用到

准备.Net转前端开发-WPF界面框架那些事,搭建基础框架

题外话 最近都没怎么写博客,主要是最近在看WPF方面的书<wpf-4-unleashed.pdf>,挑了比较重要的几个章节学习了下WPF基础技术.另外,也把这本书推荐给目前正在从事WPF开发的程序猿. 现在书看完了也该实践实践,写了个WPF项目,主要以界面框架为主.  最近的几篇博客也主要围绕这个WPF项目,介绍下WPF搭建界面框架以及怎样写自定义的Windows界面和控件. 这也许是写最后几篇关于.Net技术的博客.做.Net开发也快五年了,感觉自己搞得不温不火,另外工作中正好有一个机会转做

分享一个很酷很炫的html5特效网站源码

原创整理不易,转载请注明出处:分享一个很酷很炫的html5特效网站源码 代码下载地址:http://www.zuidaima.com/share/1784027301841920.htm 在线演示:http://demo.zuidaima.com/html/1784027301841920/index.html 分享一个很酷很炫的html5特效网站源码

Android 分享一个流量显示界面

版本:1.0 日期:2014.8.9 2014.9.24 版权:© 2014 kince 转载注明出处 波形效果有几种不同的呈现形式,比如从中间向四周散开的波形,也就是熟知的水涟漪:还有上下波动的曲线,像五线谱等.英文中可以称作Wave或者Ripple,所以暂且叫它们WaveView.WaveLayout.RippleView.RippleLayout,接下来开始实现这些效果. 首先看一下Solo 火爆足球动态壁纸, 下面中间的按钮就是一个波形按钮,它会不断地向四周辐射,由于是静态图,如果想体验

分享《精通Python爬虫框架Scrapy》+PDF+源码+迪米特里奥斯+李斌

下载:https://pan.baidu.com/s/1-ruuQebCnyLVt5L8RATT-g 更多资料:http://blog.51cto.com/14087171 <精通Python爬虫框架Scrapy>中文PDF+英文PDF+源代码 中文版PDF,364页,带目录和书签,文字可以复制粘贴,彩色配图:英文版PDF,270页,带目录和书签,文字可以复制粘贴,彩色配图:中英文两版对比学习.配套源代码. 其中,中文版如图: 原文地址:http://blog.51cto.com/140871

【源码分享】WPF漂亮界面框架实现原理分析及源码分享

1 源码下载 2 OSGi.NET插件应用架构概述 3 漂亮界面框架原理概述 4 漂亮界面框架实现  4.1 主程序  4.2 主程序与插件的通讯   4.2.1 主程序获取插件注册的服务   4.2.2 插件获取主程序注册的服务   4.2.3 服务接口  4.3 权限管理插件的登录窗体  4.4 界面框架插件   4.4.1 导航服务   4.4.2 界面框架扩展实现  4.5 插件   4.5.1 插件引用了第三方程序集   4.5.2 一个程序集如何让所有插件都直接使用   4.5.3

【开源.NET】 分享一个前后端分离的轻量级内容管理框架

开发框架要考虑的面太多了:安全.稳定.性能.效率.扩展.整洁,还要经得起实践的考验,从零开发一个可用的框架,是很耗时费神的工作.网上很多开源的框架,为何还要自己开发?我是基于以下两点: 没找到合适的:安全.稳定.简单.易用.高效.免费: 想成为架构师: 于是就自己动手,参考网上开源的项目和借鉴网友的设计思路(特别是萧秦系列博文),结合自己的实践,开发了一个简单.易用.高效的的框架,虽然不完善,但也能解决现实中的问题.不过随着见识增广,发现没负责过千万级别的项目难以成为架构师,也不可能开发出一个完

一个漂亮的php验证码类

一个漂亮的php验证码类(分享) 作者: 字体:[增加 减小] 类型:转载 下面小编就为大家分享一个漂亮的php验证码类.需要的朋友可以过来参考下 直接上代码: 复制代码 代码如下: //验证码类class ValidateCode { private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子 private $code;//验证码 private $codelen = 4;//验证码长度 pri