Silverlight甘特圖:五、Gantt圖控件[已開源發布Codeplex]


如果說TimeLine,GanttPanel,TreeGrid是甘特圖控件的三個核心部件,那么Gantt則是這三個部件之間行為和數據的協調者,Gantt統一了這三個部件的接口,提供了更簡潔的開發能力。

 

架構提要:

功能:

ganttfunctions

設計:

 

design

在*.Gantt.Core 程序集中,可以發現大量的以Layout和Descriptor作為結尾的命名類,這些類構件了GanttPanel和TimeLine的計算模型和數據模型。

TimeLineViewer和TaskEntryViewer分別作為TimeLine和GanttPanel的視圖層。Viewer類會調用Renderer進行渲染。

 

1. 語法

1.1. XAML

2. 備注

2.1. 設置數據源

甘特圖控件目前僅支持特定的數據源格式: ObservableCollection<ITaskDescriptor>。其中ITaskDescriptor是單任務信息的數據接口,詳細信息參考Class Library中內容。

因此,面對來自不同類型數據源的任務信息,開發者必須編寫解析類或方法,將XML,JSON等類型的數據轉化為甘特圖指定的數據源類型。

除初始化設定數據源外,甘特圖控件允許分步加載數據,這是通過OnRequestData事件響應來實現的。

激發OnRequestData事件的條件時,展開當前任務,任務的ITaskDescriptor.EnableExpand=true,但ITaskDescriptor.Children.Count = 0;

示例代碼如下:

1) 事件處理函數邏輯

   1: ObservableCollection<ITaskDescriptor> Gantt_OnRequestData(object sender, V2TEK.Silverlight.Charts.TreeGridHelper.RequestDataArgs args)
   2: {
   3:     return GetSimWCFData();
   4: }
   5:  
   6: public ObservableCollection<ITaskDescriptor> GetSimWCFData()
   7: {
   8:     return new ObservableCollection<ITaskDescriptor>
   9:     {

10: new SimpleTaskDescriptor{ TaskName="--------Sub Task 1", StartDate= DateTime.Now.AddMonths(4), EndDate=DateTime.Now.AddMonths(5), PercentComplete=25f,

TimeBaseLine=new SimpleTimeImpl{ StartDate=DateTime.Now.AddMonths(1), EndDate=DateTime.Now.AddMonths(10)} },

  11:         new SimpleTaskDescriptor{ TaskName="--------Sub Task 2", StartDate= DateTime.Now.AddMonths(2), EndDate=DateTime.Now.AddMonths(3), PercentComplete=50f },
  12:         new SimpleTaskDescriptor{ TaskName="--------Sub Task 3", StartDate= DateTime.Now.AddMonths(3), EndDate=DateTime.Now.AddMonths(5), PercentComplete=75f },
  13:         new SimpleTaskDescriptor{ TaskName="--------Sub Task 4", StartDate= DateTime.Now.AddMonths(5), EndDate=DateTime.Now.AddMonths(10),  PercentComplete=100f }
  14:     };
  15: }

2.2. 導航

導航指從指定任務的開始時間,或指定時間開始繪制甘特圖,免於使用滾動條搜尋。

1) 導航到指定任務

NavigateTo(ITaskDescriptor task)

2) 導航到選中任務

NavigateToSeleteItem()

3) 導航到當前時間

NavigateToCurrentDate()

4) 導航到指定時間

NavigateToDate(DateTime date)

2.3. 放大/縮小

根據TimeLine中定義的時間軸分級縮放機制逐級放大或縮小,提供了三個接口:

1) ZoomOut()

放大到下一級

2) ZoomIn()

縮小至上一級

3) ZoomToIndex(int index)

縮放至指定級別, Index即Dictionary<IDateTimeDescriptor, int>的索引。

此外,Gantt允許設置TimeLineSummaryDescriptors和TimeLineDetailDescriptors屬性值。

1) TimeLineSummaryDescriptors是上層時間軸的縮放分級定義。

2) TimeLineDetailDescriptors是下層時間軸的縮放分級定義。

2.4. 布局

除了通過以上接口更新Gantt的布局外,還可以通過下面的接口實現更為細致的布局更新。

Gantt提供了諸如XPosition,YPosition,GanttViewPortHeight,GanttViewPortWidth等布局的設定接口。在修改了這些布局屬性值后,須調用Update方法。當然,也可以分別調用GanttPanel.Update(), TreeGrid.Update, TimeLine.Update, 前提是開發者能夠確定需要更新那個子控件的布局。

You need to install Microsoft Silverlight to view this content. Get Silverlight!
Get Microsoft Silverlight



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM