基于WPF技术的甘特图控件的研究与设计
发布时间:2023-04-27 22:32:34 来源:文档文库
小
中
大
字号:
基于WPF技术的甘特图控件的研究与设计
邹海;余籦超
【摘要】TraditionalWindowsFormapplicationshavehighcomplexdegreeandpoorperformanceinrenderinggraphics,butGanttchartcontroloftenneedstodrawalotofgraphics.Inviewofthissituation,weusethenovelgraphicsrenderingtechnology---WPF(WindowsPresentationFoundationofMicrosoft,withthestructureddesignnotionweapplyaseriesofthenewfeaturessuchasnoappearancecontrol,stylesheets,triggerandsoonprovidedbyWPFtocreateGanttchartcontrol,whichiseasierinrealisationprocessandmoreexcellentinper-formanceandappearance.%传统的Windows窗体应用程序在图形渲染方面复杂程度高,运行性能差,而甘特图控件往往需要绘制大量的图形。针对这种情况,运用微软全新的图形渲染技术---WPF(WindowsPresentationFoundation),以结构化的设计思想,使用WPF提供的无外观控件、样式表、触发器等一系列新特性来创建甘特图控件。实现过程更加简易,性能与外观上表现也更加出色。【期刊名称】《计算机应用与软件》【年(卷,期】2014(000005【总页数】4页(P50-52,78【关键词】WPF;控件;甘特图【作者】邹海;余籦超
【作者单位】安徽大学计算机科学与技术学院安徽合肥230601;安徽大学计算机科学与技术学院安徽合肥230601【正文语种】中文【中图分类】TP311.520引言
传统的Windows应用程序依靠User32库以及GDI/GDI+[1]来对控件、图像以及文本进行渲染。WPF以DirectX技术为基础,为2D和3D图形提供了更好的渲染效果[2,3]。WPF通过统一的编辑模型,对2D、3D、控件以及视频、语音等进行整合,特别是与XAML[4,5]技术结合,运用XML的语法方式以声明式的编程方式,为软件的开发特别是UI(UserInterface部分的设计带来了极大的便利[6]。在图形渲染方面,WPF使用矢量图形,采用与分辨率无关的单位,使得应用程序在不同的DPI下都可以获得最佳的显示效果。此外,WPF硬件加速以及富创作等特性,使得可以在构建绚丽的UI的同时获得最佳的性能。甘特图是各类项目管理中广为采用的一种图件。本文以甘特图控件为例,详细阐述WPF技术在控件设计与开发中的应用方法。1甘特图控件的设计与实现
甘特图主要组成部分:(1任务控件。每个任务控件都是甘特表中的一条数据项的图形化表示,并且可以对它进行相关操作,比如拉伸与移动;(2甘特图容器。在WPF中,每个控件必须放入一个容器中才能进行绘制。对于甘特图,每个任务控件都位于这样一个甘特图容器中,它提供一个布局算法来对其中所包含的每个任务控件进行布局;(3时间栏。它的作用就相当绘制函数时的坐标系,对于甘特图中每个任务,最基本的要素就是任务的开始时间与结束时间,而时间栏正相当于这样一个坐标系,
根据任务的开始时间与结束时间来决定该任务的在甘特图中的位置以及任务条的长度;(4甘特表。用于显示每个任务的具体信息,如:编号、任务名称、开始时间、结束时间、工期、前置任务等。1.1数据模型
这里采用数据库来存储该控件所需的数据。本文的重点是用阐述使用WPF的新特性来设计甘特图,甘特图自身的相关知识在这里不详述,而且出于简单起见,只列出部分字段,如表1所示(数据库采用Access。
表1任务信息表用来区分不同的任务ID数字对应在甘特图左边数据表中的“编号”EventName文本任务的名称StartDate日期/时间任务的开始时间EndDate日期/时间任务的结束时间IsScope是/否该任务是不是一个摘要任务PercentageGuid文本全局统一标识,数字任务完成的百分比1.2任务控件的实现
这里将每个任务看成是一个控件,使用WPF的自定控件技术来构建无外观控件,而将外观的定义以及触发器等放在样式表中来实现,这样就实现了控件逻辑与控件外观的分离。使用WPF的依赖属性来定义每个任务所需要的属性。将每个任务看成一个控件的好处除了逻辑上的清晰外,还便于一些鼠标事件的实现,比如拖动、拉伸、悬停等。1依赖项属性
建立一个名为Event的WPF自定义控件,在生成的文件中可以看到,类Event是继承自UserControl的,所以自定义控件都继承该类。接下来就是定义该控件的依赖项属性[7