From 84cbd1c34098e2f65b7726e21cfa12d8da89c074 Mon Sep 17 00:00:00 2001 From: Yvone-Atieno <95272306+Yvone-Atieno@users.noreply.github.com> Date: Tue, 4 Jun 2024 15:36:39 +0300 Subject: [PATCH 01/21] SEO-184192 WPF Heatmap Page with Redirect --- wpf/HeatMap/Overview.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wpf/HeatMap/Overview.md b/wpf/HeatMap/Overview.md index 7d3a75c626..c86820222e 100644 --- a/wpf/HeatMap/Overview.md +++ b/wpf/HeatMap/Overview.md @@ -1,13 +1,13 @@ --- layout: post -title: About WPF HeatMap (SfHeatMap) Control | Syncfusion -description: Learn here all about introduction of Syncfusion Essential Studio WPF HeatMap (SfHeatMap) control, its elements and more. +title: Overview of WPF HeatMap (SfHeatMap) Control | Syncfusion +description: Learn here all about overview of Syncfusion Essential Studio WPF HeatMap (SfHeatMap) control, its elements, and more. platform: wpf control: SfHeatMap documentation: ug --- -# WPF HeatMap (SfHeatMap) Overview +# Overview of WPF HeatMap (SfHeatMap) **Essential HeatMap WPF** represents tabular data values as gradient colors instead of numbers. Low and high values are different colors with different gradients. From 1b1df7f02b66a6d8f023ff64b6c4ad406b7c0c4b Mon Sep 17 00:00:00 2001 From: Satish Raj <154953536+satishraj-sf4377@users.noreply.github.com> Date: Fri, 14 Jun 2024 14:19:40 +0530 Subject: [PATCH 02/21] WPF-889895-Corrected the Issues --- wpf/Diagram/Snapping/CustomSnapping.md | 4 ++-- wpf/Diagram/Snapping/DefineSnapping.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/wpf/Diagram/Snapping/CustomSnapping.md b/wpf/Diagram/Snapping/CustomSnapping.md index 23a537e050..c16f28787a 100644 --- a/wpf/Diagram/Snapping/CustomSnapping.md +++ b/wpf/Diagram/Snapping/CustomSnapping.md @@ -116,6 +116,6 @@ diagram.SnapSettings = new SnapSettings() ## See Also -[How to add gridlines for diagram](https://help.syncfusion.com/wpf/diagram/gridlines) +[How to add gridlines for diagram?](https://help.syncfusion.com/wpf/diagram/gridlines) -[How to add ruler for diagram](/wpf/diagram/rulers) \ No newline at end of file +[How to add ruler for diagram?](/wpf/diagram/rulers) \ No newline at end of file diff --git a/wpf/Diagram/Snapping/DefineSnapping.md b/wpf/Diagram/Snapping/DefineSnapping.md index 7d7786dd2e..b94cd2fe94 100644 --- a/wpf/Diagram/Snapping/DefineSnapping.md +++ b/wpf/Diagram/Snapping/DefineSnapping.md @@ -118,7 +118,7 @@ diagram.SnapSettings = new SnapSettings() This feature allows the diagram objects to snap to the nearest interaction of gridlines while being dragged or resized. This feature enables easier alignment during layout or design. -Snapping to gridlines can be enabled or disabled with the [SnapConstraints](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.SnapConstraints.html) property of SnapSettings. Default value is None. +Snapping to gridlines can be enabled or disabled with the [`SnapConstraints`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.SnapConstraints.html) property of SnapSettings. Default value is None. {% tabs %} {% highlight xaml %} From 14bd9388072eccefe68792f51cc074107d6615b6 Mon Sep 17 00:00:00 2001 From: Satish Raj <154953536+satishraj-sf4377@users.noreply.github.com> Date: Fri, 14 Jun 2024 14:37:22 +0530 Subject: [PATCH 03/21] WPF-889895-Corrected the Issues --- wpf/Diagram/Page-Settings.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/wpf/Diagram/Page-Settings.md b/wpf/Diagram/Page-Settings.md index 8c1e69e756..359fcdf10d 100644 --- a/wpf/Diagram/Page-Settings.md +++ b/wpf/Diagram/Page-Settings.md @@ -9,7 +9,7 @@ documentation: ug # Page Settings in WPF Diagram (SfDiagram) -By default, Diagram's page size is decided based on the position of diagramming elements. The size and appearance of the diagram pages can be customized using the [PageSettings](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html ) property of SfDiagram. +By default, Diagram's page size is decided based on the position of diagramming elements. The size and appearance of the diagram pages can be customized using the [`PageSettings`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html ) property of SfDiagram. * The [`PageWidth`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_PageWidth) and [`PageHeight`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_PageHeight) properties of `PageSettings` define the size of the page. * The [`PageOrientation`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_PageOrientation) property of `PageSettings` used to change the page orientation to portrait or landscape. @@ -316,17 +316,17 @@ Find the [Page Settings sample](https://github.com/SyncfusionExamples/WPF-Diagra ## See Also -[How to add or remove grid lines for diagram page](/wpf/diagram/gridlines) +[How to add or remove grid lines for diagram page?](/wpf/diagram/gridlines) -[How to define scroll setting for diagram page](/wpf/diagram/scroll-settings/scrollstatusandautoscroll) +[How to define scroll setting for diagram page?](/wpf/diagram/scroll-settings/scrollstatusandautoscroll) -[How to add rulers for diagram page](/wpf/diagram/rulers) +[How to add rulers for diagram page?](/wpf/diagram/rulers) -[How to print the diagram pages](/wpf/diagram/printing) +[How to print the diagram pages?](/wpf/diagram/printing) -[How to export the diagram page](/wpf/diagram/exporting) +[How to export the diagram page?](/wpf/diagram/exporting) -[How to interact with diagram page ](/wpf/diagram/interaction) +[How to interact with diagram page?](/wpf/diagram/interaction) [How to add multiple diagram pages?](https://www.syncfusion.com/kb/11463/how-to-add-multiple-diagram-pages-in-the-wpf-diagram-sfdiagram) From 2d061972d98084d3febc0c55a4abfb9a05e0fd35 Mon Sep 17 00:00:00 2001 From: Satish Raj <154953536+satishraj-sf4377@users.noreply.github.com> Date: Fri, 14 Jun 2024 14:51:24 +0530 Subject: [PATCH 04/21] WPF-889895-Corrected the Mistakes --- wpf/Diagram/Scroll-Settings/AutoScrollLimit.md | 6 +++--- wpf/Diagram/Scroll-Settings/DragLimit.md | 14 +++++++------- wpf/Diagram/Scroll-Settings/ScrollLimit.md | 6 +++--- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/wpf/Diagram/Scroll-Settings/AutoScrollLimit.md b/wpf/Diagram/Scroll-Settings/AutoScrollLimit.md index aed36a4b3d..68e6989aaa 100644 --- a/wpf/Diagram/Scroll-Settings/AutoScrollLimit.md +++ b/wpf/Diagram/Scroll-Settings/AutoScrollLimit.md @@ -11,9 +11,9 @@ documentation: ug The auto-scroll limit allows you to define the scrollable region of the Diagram while the page is getting auto scrolled. The [`AutoScrollLimit`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.ScrollSettings.html#Syncfusion_UI_Xaml_Diagram_ScrollSettings_AutoScrollLimit) property of scroll settings class helps to limit the auto scrolling area. It includes the following options: -* Infinity: Allows auto-scroll in all directions without any restriction. -* Diagram: Allows auto-scroll within the Diagram content. -* Limited: Allows auto-scroll within the specified area. +* **Infinity**: Allows auto-scroll in all directions without any restriction. +* **Diagram**: Allows auto-scroll within the Diagram content. +* **Limited**: Allows auto-scroll within the specified area. The default operation is `Infinity`. diff --git a/wpf/Diagram/Scroll-Settings/DragLimit.md b/wpf/Diagram/Scroll-Settings/DragLimit.md index f0bfdfe2cc..995e661c34 100644 --- a/wpf/Diagram/Scroll-Settings/DragLimit.md +++ b/wpf/Diagram/Scroll-Settings/DragLimit.md @@ -11,9 +11,9 @@ documentation: ug The drag limit allows you to define the dragging region of the Diagram while diagram objects are getting dragged. The [`DragLimit`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.ScrollSettings.html#Syncfusion_UI_Xaml_Diagram_ScrollSettings_DragLimit) property of scroll settings class helps to limit the dragging area. It includes the following options: -* Infinity: Allows you to drag the diagram objects in all directions without any restriction. -* Diagram: Allows you to drag the diagram objects within the Diagram content. -* Limited: Allows you to drag the diagram objects within the specified area. The [`EditableArea`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.ScrollSettings.html#Syncfusion_UI_Xaml_Diagram_ScrollSettings_EditableArea) property is used to specify the area that is allowed to dragging. +* **Infinity**: Allows you to drag the diagram objects in all directions without any restriction. +* **Diagram**: Allows you to drag the diagram objects within the Diagram content. +* **Limited**: Allows you to drag the diagram objects within the specified area. The [`EditableArea`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.ScrollSettings.html#Syncfusion_UI_Xaml_Diagram_ScrollSettings_EditableArea) property is used to specify the area that is allowed to dragging. The default operation is `Infinity`. @@ -60,12 +60,12 @@ private void Diagram_SelectorChangedEvent(object sender, SelectorChangedEventArg {% seealso %} -[How to snap the diagram objects on the diagram page](/wpf/diagram/snapping/definesnapping) +[How to snap the diagram objects on the diagram page?](/wpf/diagram/snapping/definesnapping) -[How to change the page settings of the diagram control](/wpf/diagram/page-settings) +[How to change the page settings of the diagram control?](/wpf/diagram/page-settings) -[How to add the gridlines for the diagram control](/wpf/diagram/gridlines) +[How to add the gridlines for the diagram control?](/wpf/diagram/gridlines) -[How to add the rulers for the diagram control](/wpf/diagram/rulers) +[How to add the rulers for the diagram control?](/wpf/diagram/rulers) {% endseealso %} diff --git a/wpf/Diagram/Scroll-Settings/ScrollLimit.md b/wpf/Diagram/Scroll-Settings/ScrollLimit.md index 92c79bd0c1..4c92ce2fb5 100644 --- a/wpf/Diagram/Scroll-Settings/ScrollLimit.md +++ b/wpf/Diagram/Scroll-Settings/ScrollLimit.md @@ -11,9 +11,9 @@ documentation: ug The scroll limit allows you to define the scrollable region of the Diagram while mouse scrolling on the page. The [`ScrollLimit`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.ScrollSettings.html#Syncfusion_UI_Xaml_Diagram_ScrollSettings_ScrollLimit) property of scroll settings helps to limit the scrolling area. It includes the following options: -* Infinity: Allows you to scroll in all directions without any restriction. -* Diagram: Allows you to scroll within the Diagram content. -* Limited: Allows you to scroll within the specified area. +* **Infinity**: Allows you to scroll in all directions without any restriction. +* **Diagram**: Allows you to scroll within the Diagram content. +* **Limited**: Allows you to scroll within the specified area. The default operation is `Diagram`. From c4c0e9e8ace47d892aa330eceab6c92525c76cbe Mon Sep 17 00:00:00 2001 From: Satish Raj <154953536+satishraj-sf4377@users.noreply.github.com> Date: Fri, 14 Jun 2024 15:47:23 +0530 Subject: [PATCH 05/21] WPF-889895-Corrected the Issues --- wpf/Diagram/Interaction/Selection.md | 59 ++++++++++++++-------------- 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/wpf/Diagram/Interaction/Selection.md b/wpf/Diagram/Interaction/Selection.md index 07a4e95299..3b8b2a93c0 100644 --- a/wpf/Diagram/Interaction/Selection.md +++ b/wpf/Diagram/Interaction/Selection.md @@ -27,15 +27,15 @@ Multiple elements can be selected with the following ways. 1. Shift+Click -You can select the group of elements that are contiguous (i.e. next to each other) by clicking one element, and then holding Shift and clicking the last element. All the element in the specified region are then selected. + You can select the group of elements that are contiguous (i.e. next to each other) by clicking one element, and then holding Shift and clicking the last element. All the element in the specified region are then selected. 2. Ctrl+Click -During single click, any existing item in the selection list be cleared, and only the item clicked recently is there in the selection list. To avoid cleaning the old selected item, Ctrl key must be on hold when clicking. + During single click, any existing item in the selection list be cleared, and only the item clicked recently is there in the selection list. To avoid cleaning the old selected item, Ctrl key must be on hold when clicking. 3. Selection rectangle / Rubber band selection -Clicking and dragging the Diagram area allows to create a rectangular region. The elements that are covered under the rectangular region are selected at the end. + Clicking and dragging the Diagram area allows to create a rectangular region. The elements that are covered under the rectangular region are selected at the end. Multiple selected elements are visually represented as shown. @@ -56,7 +56,7 @@ Multiple selected elements are visually represented as shown. {% highlight Xaml %} + SingleSelectionMode="Select"> {% endhighlight %} {% highlight C# %} @@ -71,11 +71,10 @@ Diagram.SingleSelectionMode = SingleSelectionMode.Select; |MultipleSelectionMode|Description| |--|--| |Default|Enables all behaviors of the control.| -|HoldKeyAndTap|Enables or disables elements can be selected by holding a key and tapping.| -|JustTap|Enables or disables elements can be selected by tapping.| -|None|Disables all behaviors.| -|RubberBandCompleteIntersect|Enables or disables elements that are completely positioned in the selection rectangle will be selected.| -|RubberBandPartialIntersect|Elements that intersect with the selection rectangle will be selected.| +|HoldKeyAndTap|Enables or disables elements that can be selected by holding a key and tapping.| +|JustTap|Enables or disables elements that can be selected by tapping.| +|RubberBandCompleteIntersect|Enables or disables the selection of elements that are completely positioned within the selection rectangle.| +|RubberBandPartialIntersect|Elements intersecting with the selection rectangle will be selected.| [View sample in GitHub](https://github.com/SyncfusionExamples/WPF-Diagram-Examples/tree/master/Samples/Interaction/Selectionmode-sample) @@ -89,11 +88,9 @@ The following code example illustrates how to select/unselect an item programma {% highlight C# %} // Selects an elements - node.IsSelected = true; // Unselect an element - node.IsSelected = false; {% endhighlight %} @@ -116,26 +113,28 @@ Multiple Selection will show the preview for the selected items. We have provide {% tabs %} {% highlight Xaml %} - - - + - + + + + + + - {% endhighlight %} {% highlight C# %} @@ -166,9 +165,9 @@ Diagram control provides support to change the selection handle display mode of ## Events -* [ItemSelectingEvent](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.IGraphInfo.html) and [ItemSelectedEvent](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.IGraphInfo.html) for selecting an element, will notify you the item and its original source. To explore about arguments ,please refer to [DiagramPreviewEventArgs](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.DiagramPreviewEventArgs.html) and [ItemSelectedEventArgs](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.ItemSelectedEventArgs.html) . +* [ItemSelectingEvent](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.IGraphInfo.html#Syncfusion_UI_Xaml_Diagram_IGraphInfo_ItemSelectingEvent) and [ItemSelectedEvent](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.IGraphInfo.html#Syncfusion_UI_Xaml_Diagram_IGraphInfo_ItemSelectedEvent) for selecting an element, will notify you the item and its original source. To explore about arguments ,please refer to [DiagramPreviewEventArgs](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.DiagramPreviewEventArgs.html) and [ItemSelectedEventArgs](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.ItemSelectedEventArgs.html) . -* [ItemUnselectingEvent](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.IGraphInfo.html) and [ItemUnselectedEvent](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.IGraphInfo.html) for unselecting an element, will notify you the item and its original source.To explore about arguments ,please refer to [DiagramPreviewEventArgs](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.DiagramPreviewEventArgs.html) and [DiagramEventArgs](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.DiagramEventArgs.html) . +* [ItemUnselectingEvent](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.IGraphInfo.html#Syncfusion_UI_Xaml_Diagram_IGraphInfo_ItemUnSelectingEvent) and [ItemUnselectedEvent](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.IGraphInfo.html#Syncfusion_UI_Xaml_Diagram_IGraphInfo_ItemUnSelectedEvent) for unselecting an element, will notify you the item and its original source.To explore about arguments ,please refer to [DiagramPreviewEventArgs](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.DiagramPreviewEventArgs.html) and [DiagramEventArgs](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.DiagramEventArgs.html) . ## See Also From b4fa356072b1892249334821d6e1fee3a5579edb Mon Sep 17 00:00:00 2001 From: Satish Raj <154953536+satishraj-sf4377@users.noreply.github.com> Date: Fri, 14 Jun 2024 16:48:02 +0530 Subject: [PATCH 06/21] WPF-889895-Corrected the Issues --- wpf/Diagram/Interaction/Deletion.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/wpf/Diagram/Interaction/Deletion.md b/wpf/Diagram/Interaction/Deletion.md index 4cb0c5382b..cae1a9fdc9 100644 --- a/wpf/Diagram/Interaction/Deletion.md +++ b/wpf/Diagram/Interaction/Deletion.md @@ -11,27 +11,27 @@ documentation: ug Selected objects can be deleted by using the Delete key or In-built Delete command through QuickCommand. -* [ItemDeletedEvent](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.IGraphInfo.html) will notify you with the deleted item in argument. To explore about arguments , please refer to [ItemDeletedEventArgs](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.ItemDeletedEventArgs.html). +* [ItemDeletedEvent](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.IGraphInfo.html#Syncfusion_UI_Xaml_Diagram_IGraphInfo_ItemDeleted) will notify you with the deleted item in argument. To explore about arguments , please refer to [ItemDeletedEventArgs](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.ItemDeletedEventArgs.html). -* [ItemDeletingEvent](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.IGraphInfo.html) will notify you with the item , option to cancel the deleting operation of item and option to decide on deleting dependent Connector when its Source/Target gets deleting. To explore about arguments , please refer to [ItemDeletingEventArgs](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.ItemDeletingEventArgs.html). +* [ItemDeletingEvent](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.IGraphInfo.html#Syncfusion_UI_Xaml_Diagram_IGraphInfo_ItemDeletingEvent) will notify you with the item , option to cancel the deleting operation of item and option to decide on deleting dependent Connector when its Source/Target gets deleting. To explore about arguments , please refer to [ItemDeletingEventArgs](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.ItemDeletingEventArgs.html). {% tabs %} {% highlight C# %} (diagram.Info as IGraphInfo).ItemDeletingEvent += MainWindow_ItemDeletingEvent; - /// - /// DiagramPreviewEventArgs is the Base class for EventArgs. - /// Casting the args will help us to get ItemDeletingEventArgs. - /// - /// - /// - private void MainWindow_ItemDeletingEvent(object sender, DiagramPreviewEventArgs args) - { - //For Deleting Node Without its Dependent Connector - - (args as ItemDeletingEventArgs).DeleteDependentConnector = false; - } +/// +/// DiagramPreviewEventArgs is the Base class for EventArgs. +/// Casting the args will help us to get ItemDeletingEventArgs. +/// +/// +/// +private void MainWindow_ItemDeletingEvent(object sender, DiagramPreviewEventArgs args) +{ + //For Deleting Node Without its Dependent Connector + + (args as ItemDeletingEventArgs).DeleteDependentConnector = false; +} {% endhighlight %} {% endtabs %} From 019f34adc78c344b44b42fcf897982910c29c026 Mon Sep 17 00:00:00 2001 From: Satish Raj <154953536+satishraj-sf4377@users.noreply.github.com> Date: Tue, 18 Jun 2024 11:10:55 +0530 Subject: [PATCH 07/21] WPF-889895-Corrected the Issues --- wpf/Diagram/Interaction/UserHandle.md | 48 +++++++++++++-------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/wpf/Diagram/Interaction/UserHandle.md b/wpf/Diagram/Interaction/UserHandle.md index db92db2d6c..6db620f661 100644 --- a/wpf/Diagram/Interaction/UserHandle.md +++ b/wpf/Diagram/Interaction/UserHandle.md @@ -23,35 +23,35 @@ SfDiagram provides support to define custom quick command around the Nodes, Conn {% highlight Xaml %} - + {% endhighlight %} {% highlight C# %} // Element to represent the frequently used commands - QuickCommandViewModel quick = new QuickCommandViewModel() - { - // Outer part of quick command. - Shape = this.Resources["Ellipse"], - // appearence of shape. - ShapeStyle = this.Resources["QuickCommandstyle"] as Style, - //Inner part of quick command and it allows to host any UI elements - Content = - "M3.7399902,0L16,12.258972 28.26001,0 32,3.7399902 19.73999,16 32,28.258972 28.26001,32 16,19.73999 3.7399902,32 0,28.258972 12.26001,16 0,3.7399902z", - - Command = (Diagram.Info as IGraphInfo).Commands.Cut - }; - - // Adding new QuickCommand object in Commands collection - (Diagram.SelectedItems as SelectorViewModel).Commands = new QuickCommandCollection() - { - quick - }; +QuickCommandViewModel quick = new QuickCommandViewModel() +{ + // Outer part of quick command. + Shape = this.Resources["Ellipse"], + // appearence of shape. + ShapeStyle = this.Resources["QuickCommandstyle"] as Style, + //Inner part of quick command and it allows to host any UI elements + Content = + "M3.7399902,0L16,12.258972 28.26001,0 32,3.7399902 19.73999,16 32,28.258972 28.26001,32 16,19.73999 3.7399902,32 0,28.258972 12.26001,16 0,3.7399902z", + + Command = (Diagram.Info as IGraphInfo).Commands.Cut +}; + +// Adding new QuickCommand object in Commands collection +(Diagram.SelectedItems as SelectorViewModel).Commands = new QuickCommandCollection() +{ + quick +}; {% endhighlight %} {% endtabs %} @@ -64,7 +64,7 @@ Appearance of the [QuickCommand](https://help.syncfusion.com/cr/wpf/Syncfusion.U ![custom appearance of quick command](Interaction_images/quickcommand_img3.png) -N> By default QuickCommand will host on Node. [VisibilityMode](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.QuickCommandViewModel.html#Syncfusion_UI_Xaml_Diagram_QuickCommandViewModel_VisibilityMode) property is to define the host of the QuickCommand on either Node or Connector or both. +N> By default QuickCommand will host on Node. [`VisibilityMode`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.QuickCommandViewModel.html#Syncfusion_UI_Xaml_Diagram_QuickCommandViewModel_VisibilityMode) property is to define the host of the QuickCommand on either Node or Connector or both. ### Alignment From 4d547a479eb09fca9caaac761a961d90afa1f653 Mon Sep 17 00:00:00 2001 From: Satish Raj <154953536+satishraj-sf4377@users.noreply.github.com> Date: Tue, 18 Jun 2024 11:22:52 +0530 Subject: [PATCH 08/21] WPF-889895-Corrected the Issues - Corrected the Grammar Mistake - Removed the Highlight for "IntelliMouse Pan" and Made the sub topic bold --- wpf/Diagram/Interaction/ZoomPan.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wpf/Diagram/Interaction/ZoomPan.md b/wpf/Diagram/Interaction/ZoomPan.md index 4f6708246d..e33fbb6753 100644 --- a/wpf/Diagram/Interaction/ZoomPan.md +++ b/wpf/Diagram/Interaction/ZoomPan.md @@ -9,13 +9,13 @@ documentation: ug # Zoom Pan in WPF Diagram -* We can Zoom in or Zoom out the diagram view.Diagram can be zoomed in or out by using Ctrl + mouse wheel. +* We can Zoom in or Zoom out the diagram view. Diagram can be zoomed in or out by simply holding down the Ctrl key and scrolling with your mouse wheel. * When a large Diagram is loaded, only certain portion of the Diagram is visible. The remaining portions are clipped. Clipped portions can be explored by scrolling the scrollbars or panning the Diagram. ![Zoom Pan](Interaction_images/ZoomPan.gif) -* `IntelliMouse Pan` : We can pan the diagram using scroll wheel. To pan, user must hold down the Scroll Wheel anywhere in the diagram and move the cursor towards any direction (for example: On moving cursor towards left direction, diagram will be panned towards left). And releasing Scroll Wheel will stop the panning. Speed of the Panning is proportional to the distance between the Scroll Wheel pressed position and current mouse position, i.e. panning will be faster if the distance is large and slower if the distance is small. +* **IntelliMouse Pan** : We can pan the diagram using scroll wheel. To pan, user must hold down the Scroll Wheel anywhere in the diagram and move the cursor towards any direction (for example: On moving cursor towards left direction, diagram will be panned towards left). And releasing Scroll Wheel will stop the panning. Speed of the Panning is proportional to the distance between the Scroll Wheel pressed position and current mouse position, i.e. panning will be faster if the distance is large and slower if the distance is small. ![WPF Diagram IntelliMousePan](Interaction_images/IntelliMousePan.png) From 479b103ef3a902a2c453a53639e13ec523499c1d Mon Sep 17 00:00:00 2001 From: Satish Raj <154953536+satishraj-sf4377@users.noreply.github.com> Date: Wed, 19 Jun 2024 12:43:28 +0530 Subject: [PATCH 09/21] WPF-889895-Updated the Image --- .../Interaction/Interaction_images/Delete.gif | Bin 49936 -> 46782 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/wpf/Diagram/Interaction/Interaction_images/Delete.gif b/wpf/Diagram/Interaction/Interaction_images/Delete.gif index 68cd683e9cd17ae41362225f8615cbe99a3a6e30..10849229d216e6a8eb8d13247e76edc75178e73a 100644 GIT binary patch delta 42419 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 Date: Tue, 25 Jun 2024 17:10:02 +0530 Subject: [PATCH 10/21] WPF-889895-Corrected the highlighting mistakes as suggested in review --- wpf/Diagram/Snapping/DefineSnapping.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wpf/Diagram/Snapping/DefineSnapping.md b/wpf/Diagram/Snapping/DefineSnapping.md index b94cd2fe94..e58e02b38d 100644 --- a/wpf/Diagram/Snapping/DefineSnapping.md +++ b/wpf/Diagram/Snapping/DefineSnapping.md @@ -71,7 +71,7 @@ diagram.SnapSettings.SnapToObject = SnapToObject.All; ## How to change the snap indication style -When snapping, cyan shade color indication lines will be shown. These indication lines styles can be customized by using the [`SnapIndicatorStyle`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.SnapSettings.html#Syncfusion_UI_Xaml_Diagram_SnapSettings_SnapIndicatorStyle) property of SnapSettings class. +When snapping, cyan shade color indication lines will be shown. These indication lines styles can be customized by using the [`SnapIndicatorStyle`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.SnapSettings.html#Syncfusion_UI_Xaml_Diagram_SnapSettings_SnapIndicatorStyle) property of `SnapSettings` class. {% tabs %} {% highlight xaml %} @@ -118,7 +118,7 @@ diagram.SnapSettings = new SnapSettings() This feature allows the diagram objects to snap to the nearest interaction of gridlines while being dragged or resized. This feature enables easier alignment during layout or design. -Snapping to gridlines can be enabled or disabled with the [`SnapConstraints`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.SnapConstraints.html) property of SnapSettings. Default value is None. +Snapping to gridlines can be enabled or disabled with the [SnapConstraints](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.SnapConstraints.html) property of `SnapSettings`. Default value is None. {% tabs %} {% highlight xaml %} From d765b6c9b16a7be803c433f2434aca29d7b28fe1 Mon Sep 17 00:00:00 2001 From: Satish Raj <154953536+satishraj-sf4377@users.noreply.github.com> Date: Tue, 25 Jun 2024 17:16:42 +0530 Subject: [PATCH 11/21] Revert "WPF-889895-Corrected the Issues" Removed the Highlighting This reverts commit 14bd9388072eccefe68792f51cc074107d6615b6. --- wpf/Diagram/Page-Settings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wpf/Diagram/Page-Settings.md b/wpf/Diagram/Page-Settings.md index 359fcdf10d..9ab8cdbb27 100644 --- a/wpf/Diagram/Page-Settings.md +++ b/wpf/Diagram/Page-Settings.md @@ -9,7 +9,7 @@ documentation: ug # Page Settings in WPF Diagram (SfDiagram) -By default, Diagram's page size is decided based on the position of diagramming elements. The size and appearance of the diagram pages can be customized using the [`PageSettings`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html ) property of SfDiagram. +By default, Diagram's page size is decided based on the position of diagramming elements. The size and appearance of the diagram pages can be customized using the [PageSettings](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html ) property of SfDiagram. * The [`PageWidth`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_PageWidth) and [`PageHeight`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_PageHeight) properties of `PageSettings` define the size of the page. * The [`PageOrientation`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_PageOrientation) property of `PageSettings` used to change the page orientation to portrait or landscape. From f8979e9bcb66d0441819c95f3eb0841604171433 Mon Sep 17 00:00:00 2001 From: Satish Raj <154953536+satishraj-sf4377@users.noreply.github.com> Date: Tue, 25 Jun 2024 17:36:16 +0530 Subject: [PATCH 12/21] WPF-889895-Highlighted the property as suggested in the review --- wpf/Diagram/Page-Settings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wpf/Diagram/Page-Settings.md b/wpf/Diagram/Page-Settings.md index 9ab8cdbb27..e5e8951b35 100644 --- a/wpf/Diagram/Page-Settings.md +++ b/wpf/Diagram/Page-Settings.md @@ -9,7 +9,7 @@ documentation: ug # Page Settings in WPF Diagram (SfDiagram) -By default, Diagram's page size is decided based on the position of diagramming elements. The size and appearance of the diagram pages can be customized using the [PageSettings](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html ) property of SfDiagram. +By default, Diagram's page size is decided based on the position of diagramming elements. The size and appearance of the diagram pages can be customized using the [PageSettings](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html ) property of `SfDiagram`. * The [`PageWidth`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_PageWidth) and [`PageHeight`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_PageHeight) properties of `PageSettings` define the size of the page. * The [`PageOrientation`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_PageOrientation) property of `PageSettings` used to change the page orientation to portrait or landscape. From 674debd58c95b3d8f1e2418883c015175310d022 Mon Sep 17 00:00:00 2001 From: TamilarasanGunasekaran Date: Tue, 25 Jun 2024 19:39:01 +0530 Subject: [PATCH 13/21] WPF 886828 - Updated Gantt UG content changes --- wpf/Gantt/auto-update-hierarchy.md | 40 ++++++++--------- wpf/Gantt/baseline-support.md | 25 +++++------ wpf/Gantt/calendar-customization.md | 36 +++++++-------- wpf/Gantt/custom-node-style.md | 2 +- wpf/Gantt/custom-schedule.md | 28 ++++++------ wpf/Gantt/custom-tooltip.md | 3 +- wpf/Gantt/data-binding.md | 15 +++---- wpf/Gantt/datetime-indicator-customization.md | 16 +++---- wpf/Gantt/dependency-relationship.md | 14 +++--- wpf/Gantt/drag-drop.md | 30 ++++++------- wpf/Gantt/filtering-sorting.md | 8 ++-- wpf/Gantt/getting-started.md | 34 +++++++++----- wpf/Gantt/highlighting-tasks.md | 12 ++--- wpf/Gantt/holidays-customization.md | 11 +++-- wpf/Gantt/import-and-export-support.md | 8 ++-- wpf/Gantt/localization.md | 4 +- wpf/Gantt/migration-to-26v-or-higher.md | 2 +- wpf/Gantt/resource-view-gantt-inline-items.md | 8 ++-- wpf/Gantt/strip-lines.md | 44 +++++++++---------- wpf/Gantt/zooming.md | 22 +++++----- 20 files changed, 183 insertions(+), 179 deletions(-) diff --git a/wpf/Gantt/auto-update-hierarchy.md b/wpf/Gantt/auto-update-hierarchy.md index 5ebb9e216b..b878cf280c 100644 --- a/wpf/Gantt/auto-update-hierarchy.md +++ b/wpf/Gantt/auto-update-hierarchy.md @@ -9,7 +9,7 @@ documentation: ug # Auto Update Hierarchy in WPF Gantt -Essential Gantt provides support for auto updating hierarchy, in which the Gantt control will listen to the change in child tasks/activities and automatically update them in the parent task/activity accordingly. There is no need to have any custom logics in business objects to update the hierarchy. You can enable or disable this functionality by using the UseAutoUpdateHierarchy property. +Essential Gantt provides support for auto updating hierarchy, in which the Gantt control will listen to the change in child tasks/activities and automatically update them in the parent task/activity accordingly. There is no need to have any custom logics in business objects to update the hierarchy. You can enable or disable this functionality by using the [UseAutoUpdateHierarchy](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_UseAutoUpdateHierarchy) property. ## Use Case Scenario @@ -430,8 +430,8 @@ public class Task : NotificationObject } /// The difference between the end date and starting date is calculated exactly. - duration = endDate.Subtract(startDate); - return duration; + this.duration = endDate.Subtract(startDate); + return this.duration; } set { @@ -439,13 +439,13 @@ public class Task : NotificationObject { var sum = new TimeSpan(0, 0, 0, 0); sum = this.childCollection.Aggregate(sum, (current, task) => current + task.Duration); - duration = sum; + this.duration = sum; return; } duration = value; /// The end date is calculated to make the change in end date based on duration. The duration is interlinked with the starting date and end date, so it will affect the both based on the changes. - EndDate = startDate.AddDays(Double.Parse(duration.TotalDays.ToString())); + this.EndDate = this.startDate.AddDays(Double.Parse(this.duration.TotalDays.ToString())); } } @@ -454,17 +454,17 @@ public class Task : NotificationObject /// public DateTime EndDate { - get { return endDate; } + get { return this.endDate; } set { if (this.childCollection != null && this.childCollection.Count >= 1) { /// If this task is a parent task, then it should have the maximum end time to compare the date with maximum date of its child tasks. - if (value >= this.childCollection.Max(s => s.EndDate) && endDate != value) - endDate = value; + if (value >= this.childCollection.Max(s => s.EndDate) && this.endDate != value) + this.endDate = value; } else - endDate = value; + this.endDate = value; RaisePropertyChanged("EndDate"); /// The changed duration is invoked to notify the change in duration based on the new end date. RaisePropertyChanged("Duration"); @@ -478,7 +478,7 @@ public class Task : NotificationObject { get { - return startDate; + return this.startDate; } set { @@ -486,11 +486,11 @@ public class Task : NotificationObject if (this.childCollection != null && this.childCollection.Count >= 1) { - if (value <= this.childCollection.Min(s => s.startDate) && startDate != value) - startDate = value; + if (value <= this.childCollection.Min(s => s.startDate) && this.startDate != value) + this.startDate = value; } else - startDate = value; + this.startDate = value; RaisePropertyChanged("startDate"); /// The changed duration is invoked to notify the change in duration based on the new start date. RaisePropertyChanged("Duration"); @@ -502,10 +502,10 @@ public class Task : NotificationObject /// public string Name { - get { return name; } + get { return this.name; } set { - name = value; + this.name = value; RaisePropertyChanged("Name"); } } @@ -515,10 +515,10 @@ public class Task : NotificationObject /// public int Id { - get { return id; } + get { return this.id; } set { - id = value; + this.id = value; RaisePropertyChanged("Id"); } } @@ -573,9 +573,9 @@ public class Task : NotificationObject private void UpdateData() { /// Update the starting date and end date based on the changes made in the date of child tasks. - StartDate = this.childCollection.Select(c => c.startDate).Min(); - EndDate = this.childCollection.Select(c => c.EndDate).Max(); - progress = (this.childCollection.Aggregate(0d, (cur, task) => cur + task.progress)) / this.childCollection.Count; + this.StartDate = this.childCollection.Select(c => c.startDate).Min(); + this.EndDate = this.childCollection.Select(c => c.EndDate).Max(); + this.progress = (this.childCollection.Aggregate(0d, (cur, task) => cur + task.progress)) / this.childCollection.Count; } /// diff --git a/wpf/Gantt/baseline-support.md b/wpf/Gantt/baseline-support.md index 4f4623d9ae..6dfcb14988 100644 --- a/wpf/Gantt/baseline-support.md +++ b/wpf/Gantt/baseline-support.md @@ -37,14 +37,14 @@ Type Return Type -LoadVarianceTableView +[LoadVarianceTableView](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_LoadVarianceTableView) this method is used to load the Variance view of the Gantt. LoadVarianceTableView() N/A void -LoadDefaultTableView +[LoadDefaultTableView](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_LoadDefaultTableView) this method is used to load the Default (Editing) view of the Gantt. LoadDefaultTableView() N/A @@ -57,8 +57,8 @@ To add Baseline Table View to an application: 1. Declare the baseline properties in the view model. 2. Map the properties to Gantt in the corresponding TaskAttributeMappingProperty. -3. To load the Variance view, call the LoadVarianceTableView() method of the Gantt. -4. To load the Default (Editing) view, call the LoadDefaultTableView() method of the Gantt. +3. To load the Variance view, call the [LoadVarianceTableView](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_LoadVarianceTableView) method of the Gantt. +4. To load the Default (Editing) view, call the [LoadDefaultTableView](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_LoadDefaultTableView) method of the Gantt. The following codes illustrate this: @@ -451,7 +451,6 @@ public class ViewModel taskDetails.Add(new Task() { ID = 1, Name = "Residential Construction (2500 sq.ft)", StartDate = new DateTime(2012, 3, 1), EndDate = new DateTime(2012, 3, 15), BaselineStart = new DateTime(2012, 3, 1), BaselineEnd = new DateTime(2012, 3, 14), Progress = 0d, Cost = 500, BaselineCost = 833d, }); taskDetails[0].ChildCollection.Add(new Task() { ID = 2, Name = "General Considerations", StartDate = new DateTime(2012, 7, 3), EndDate = new DateTime(2012, 7, 14), BaselineStart = new DateTime(2012, 7, 3), BaselineEnd = new DateTime(2012, 7, 14), Progress = 0d, Cost = 89, BaselineCost = 833d, }); - taskDetails[0].ChildCollection[0].ChildCollection.Add(new Task() { ID = 3, Name = "Finalize and Approve Plans", StartDate = new DateTime(2012, 3, 1), EndDate = new DateTime(2012, 3, 15), BaselineStart = new DateTime(2012, 3, 2), BaselineEnd = new DateTime(2012, 3, 16), Progress = 0d, Cost = 500, BaselineCost = 833d, }); taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection.Add(new Task() { ID = 4, Name = "Review and Finalize Site Plans", StartDate = new DateTime(2012, 3, 1), EndDate = new DateTime(2012, 3, 20), BaselineStart = new DateTime(2012, 3, 1), BaselineEnd = new DateTime(2012, 3, 20), Progress = 0d, Cost = 500, BaselineCost = 833d, }); taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection.Add(new Task() { ID = 5, Name = "Sign contract and Proceed", StartDate = new DateTime(2012, 3, 20), EndDate = new DateTime(2012, 3, 22), BaselineStart = new DateTime(2012, 3, 19), BaselineEnd = new DateTime(2012, 3, 21), Progress = 0d, Cost = 500, BaselineCost = 833d, }); @@ -501,7 +500,6 @@ public class ViewModel taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection.Add(new Task() { ID = 40, Name = "Install Wall Insulation", StartDate = new DateTime(2012, 6, 19), EndDate = new DateTime(2012, 6, 21), BaselineStart = new DateTime(2012, 6, 19), BaselineEnd = new DateTime(2012, 6, 21), Progress = 0d, Cost = 53, BaselineCost = 83d, }); taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection.Add(new Task() { ID = 41, Name = "Install Ceiling Insulation", StartDate = new DateTime(2012, 6, 21), EndDate = new DateTime(2012, 6, 22), BaselineStart = new DateTime(2012, 6, 21), BaselineEnd = new DateTime(2012, 6, 22), Progress = 0d, Cost = 89, BaselineCost = 83d, }); - taskDetails[0].ChildCollection[6].ChildCollection.Add(new Task() { ID = 42, Name = "Painting and Wallpaper", StartDate = new DateTime(2012, 6, 22), EndDate = new DateTime(2012, 6, 23), BaselineStart = new DateTime(2012, 6, 22), BaselineEnd = new DateTime(2012, 6, 23), Progress = 0d, Cost = 453, BaselineCost = 563, }); taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection.Add(new Task() { ID = 43, Name = "Painting all Interior", StartDate = new DateTime(2012, 6, 22), EndDate = new DateTime(2012, 6, 23), BaselineStart = new DateTime(2012, 6, 22), BaselineEnd = new DateTime(2012, 6, 23), Progress = 0d, Cost = 453, BaselineCost = 563, }); taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection.Add(new Task() { ID = 44, Name = "Painting all Exterior", StartDate = new DateTime(2012, 6, 23), EndDate = new DateTime(2012, 6, 25), BaselineStart = new DateTime(2012, 6, 23), BaselineEnd = new DateTime(2012, 6, 25), Progress = 0d, Cost = 352, BaselineCost = 342, }); @@ -527,7 +525,6 @@ public class ViewModel taskDetails[0].ChildCollection[7].ChildCollection.Add(new Task() { ID = 60, Name = "Final Inspection", StartDate = new DateTime(2012, 7, 16), EndDate = new DateTime(2012, 7, 17), BaselineStart = new DateTime(2012, 7, 16), BaselineEnd = new DateTime(2012, 7, 17), Progress = 0d, Cost = 0, BaselineCost = 5, }); taskDetails[0].ChildCollection[7].ChildCollection.Add(new Task() { ID = 61, Name = "Move In", StartDate = new DateTime(2012, 7, 17), EndDate = new DateTime(2012, 7, 17), BaselineStart = new DateTime(2012, 7, 18), BaselineEnd = new DateTime(2012, 7, 18), Progress = 0d, Cost = 0, BaselineCost = 0, }); - //Adding Resources taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection[0].Resource.Add(ResidentialConstructionResources[1]); taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection[0].Resource.Add(ResidentialConstructionResources[0]); @@ -715,7 +712,7 @@ Data Type Reference links -ShowBaseline +[ShowBaseline](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ShowBaseline) Controls the view of baseline in the Gantt Chart. Default value is false DependencyProperty bool @@ -738,14 +735,14 @@ Data Type Reference links -BaselineColor +[BaselineColor](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_BaselineColor) Used to customize the baseline color. Default value is Orange DependencyProperty Brush NA -BaselineStrokeThickness +[BaselineStrokeThickness](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_BaselineStrokeThickness) Used to customize the baseline thickness. Default value is 3d DependencyProperty bool @@ -792,7 +789,7 @@ Type Data Type -ShowAddNewColumn +[ShowAddNewColumn](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ShowAddNewColumn) Gets/Sets the value that is used in displaying/hiding the add new column combo box in grid DependencyProperty bool @@ -803,8 +800,8 @@ Adding On-Demand Baseline Column Inclusion to an Application To add the On-Demand Baseline Column Inclusion to an application you need to enable the AddNewColumn of Gantt Grid, which will have a drop down cell on its head, which in turn will have the baseline columns that can be added dynamically. To enable this feature: -1. To show the Add New Column of Gantt Grid, set the ShowAddNewColumn Property to true in Gantt. -2. To include the Baseline columns in the Add New Columns drop down cell, provide the corresponding mapping name in TaskAttributeMapping. +1. To show the Add New Column of Gantt Grid, set the [ShowAddNewColumn](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ShowAddNewColumn) Property to true in Gantt. +2. To include the Baseline columns in the Add New Columns drop down cell, provide the corresponding mapping name in [TaskAttributeMapping](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TaskAttributeMapping.html). 3. Mapped Baseline columns will be listed in the drop down cell. 4. By selecting a column name from the drop down cell, the corresponding column will be dynamically added to the Gantt Grid. @@ -898,7 +895,7 @@ Type Return Type -GetProjectStatistics +[GetProjectStatistics](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_GetProjectStatistics) this method is used to get the current statistics information about the project GetProjectStatistics() N/A diff --git a/wpf/Gantt/calendar-customization.md b/wpf/Gantt/calendar-customization.md index 9fc4fea083..89bee827b9 100644 --- a/wpf/Gantt/calendar-customization.md +++ b/wpf/Gantt/calendar-customization.md @@ -29,63 +29,63 @@ Data Type Reference links -WeekBeginsOn +[WeekBeginsOn](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_WeekBeginsOn) Gets or sets the starting day of a week in the project schedule. By default it is set to Sunday. DependencyProperty Enum N/A -FiscalYearBeginsOn +[FiscalYearBeginsOn](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_FiscalYearBeginsOn) Gets or sets the starting month of a fiscal year. By default it is set to January DependencyProperty Enum N/A -IsFYNumberingEnabled +[IsFYNumberingEnabled](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_IsFiscalYearNumberingEnabled) Gets or sets the Fiscal Year Numbering. If this property is changed, it will be reflected in the schedule.By default FY Numbering is set to false. Dependency Property bool N/A -DefaultStartTime +[DefaultStartTime](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_DefaultStartTime) Gets or sets the task starting time in a day. This is based on the {{ '_GanttTime_' | markdownify }} class of the Gantt control.By default this is set to 9.00 AM Dependency Property GanttTime N/A -DefaultEndTime +[DefaultEndTime](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_DefaultEndTime) Gets or sets the task ending time in a day. This is based on the {{ '_GanttTime_' | markdownify }} class of the Gantt control.By default this is set to 6.00 PM Dependency Property GanttTime N/A -Weekends +[Weekends](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_Weekends) Gets or sets the weekend days. Default value is Saturday, Sunday. Dependency Property Days N/A -ShowWeekends +[ShowWeekends](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ShowWeekends) Enables or disables the weekend days in schedule. Default value is true. Dependency Property bool N/A -ExcludeWeekends +[ExcludeWeekends](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ExcludeWeekends) Excludes or includes the weekend days in duration calculation. Default value is false. Dependency Property bool N/A -ShowNonWorkingHoursBackground +[ShowNonWorkingHoursBackground](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ShowNonWorkingHoursBackground) Enables or disables the background for weekend days. Default value is true. Dependency Property bool @@ -211,11 +211,11 @@ public class ViewModel { get { - return defaultstart; + return this.defaultstart; } set { - defaultstart = value; + this.defaultstart = value; } } @@ -227,11 +227,11 @@ public class ViewModel { get { - return defaultend; + return this.defaultend; } set { - defaultend = value; + this.defaultend = value; } } @@ -243,11 +243,11 @@ public class ViewModel { get { - return fynumbering; + return this.fynumbering; } set { - fynumbering = value; + this.fynumbering = value; } } @@ -316,11 +316,11 @@ public class ViewModel { get { - return _taskCollection; + return this._taskCollection; } set { - _taskCollection = value; + this._taskCollection = value; } } @@ -353,7 +353,6 @@ public class ViewModel taskDetails[0].Child = MarketAnalysis; - taskDetails.Add(new TaskDetails { StartDate = new DateTime(2010, 6, 18), FinishDate = new DateTime(2010, 7, 14), TaskName = "Infrastructure for Product Planning", TaskId = 9 }); ObservableCollection InfrastructureReq = new ObservableCollection(); InfrastructureReq.Add(new TaskDetails { StartDate = new DateTime(2010, 6, 18), FinishDate = new DateTime(2010, 6, 24), TaskName = "Define procedure for qualifying ideas", TaskId = 10 }); @@ -380,7 +379,6 @@ public class ViewModel Product[5].Predecessor.Add(new Predecessor { GanttTaskIndex = 17, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); Product[5].Predecessor.Add(new Predecessor { GanttTaskIndex = 18, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); - taskDetails[2].Child = Product; taskDetails.Add(new TaskDetails { StartDate = new DateTime(2010, 9, 2), FinishDate = new DateTime(2010, 9, 10), TaskName = "Analysing Customer Requirement", TaskId = 20 }); diff --git a/wpf/Gantt/custom-node-style.md b/wpf/Gantt/custom-node-style.md index b2e6de0076..6a2636ce97 100644 --- a/wpf/Gantt/custom-node-style.md +++ b/wpf/Gantt/custom-node-style.md @@ -9,7 +9,7 @@ documentation: ug # Custom Node Style in WPF Gantt -Custom node style enables you to design your own style to the nodes that will be displayed in the Gantt. You can also customize the progress bar of the Task Node.Currently Gantt Control supports three types of node. They are: +Custom node style enables you to design your own style to the nodes that will be displayed in the Gantt. You can also customize the progress bar of the Task Node.Currently [GanttControl](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html) supports three types of node. They are: * Header Node * Task Node diff --git a/wpf/Gantt/custom-schedule.md b/wpf/Gantt/custom-schedule.md index c9ee4eee95..a61c33d8b2 100644 --- a/wpf/Gantt/custom-schedule.md +++ b/wpf/Gantt/custom-schedule.md @@ -20,15 +20,15 @@ These types are included in the existing ScheduleType enum. ## Custom Numeric -Custom Numeric schedule is used to define your own schedule with any numeric measurement unit other than date time. With this schedule, you can track the progress based on your own measurement and there is no need to depend on Date Time. Two new API’s are added to the Mapping attributes to support this schedule in GanttChart and GanttGrid. +Custom Numeric schedule is used to define your own schedule with any numeric measurement unit other than date time. With this schedule, you can track the progress based on your own measurement and there is no need to depend on Date Time. Two new API’s are added to the Mapping attributes to support this schedule in [GanttChart](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttChart.html) and [GanttGrid](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttGrid.html). ## Custom DateTime Custom DateTime schedule is used to define your own date time schedule, which can match your current financial calendar. By using schedule type as custom schedule, you can define your schedule on quarterly basis. -In both the custom schedules, Gantt will get the information from the application to render the schedule. Gantt will accept the custom schedule information in the form of a collection of GanttScheduleRowInfo object, and process it to draw the schedule. +In both the custom schedules, Gantt will get the information from the application to render the schedule. Gantt will accept the custom schedule information in the form of a collection of [GanttScheduleRowInfo](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttScheduleRowInfo.html) object, and process it to draw the schedule. -GanttScheduleRowInfo class will have following fields: +[GanttScheduleRowInfo](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttScheduleRowInfo.html) class will have following fields: 1. PixelsPerUnit—Gets the information of the pixel value equivalent to one unit in custom measurement. 2. CellsPerUnit—Gets the information of a cell size of preceding row in the schedule based on the immediate next row. In CustomDateTime Schedule, the CellsPerUnit will be used to customize the cell. For example, in quarterly basis month cell, You need to draw a schedule by consolidating three months. For this, you need to define the CellsPerUnit of that corresponding row as 3. @@ -61,7 +61,7 @@ Type Data Type -CustomScheduleSource +[CustomScheduleSource](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_CustomScheduleSource) Gets/Sets the custom schedule items Source of the Gantt. DependencyProperty IList<GanttScheduleRowInfo> @@ -78,7 +78,7 @@ Arguments Type -ScheduleCellCreated +[ScheduleCellCreated](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ScheduleCellCreated) Event will be triggered whenever a schedule cell is created. The handler of the event will have the newly created cell (GanttScheduleCell) in the argument.By handling this event, you can customize the appearance of the cell. ScheduleCellCreated (object sender, ScheduleCellCreatedEventArgs args) Routed Event @@ -99,25 +99,25 @@ Type Data Type -CellDate +[CellDate](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttScheduleCell.html#Syncfusion_Windows_Controls_Gantt_GanttScheduleCell_CellDate) Gets/Sets the current schedule cell date in the datetime schedule. Dependency Property DateTime -CellToolTip +[CellToolTip](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttScheduleCell.html#Syncfusion_Windows_Controls_Gantt_GanttScheduleCell_CellToolTip) Gets/Sets the current schedule cell tool tip. Dependency Property Object -CellTimeUnit +[CellTimeUnit](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttScheduleCell.html#Syncfusion_Windows_Controls_Gantt_GanttScheduleCell_CellTimeUnit) Gets/Sets the current schedule row time unit (like weeks, months and so on). Dependency Property TimeUnit (Enum) -Content +`Content` Gets/Sets the current schedule cell content. Dependency Property Object @@ -127,9 +127,9 @@ Object To Add CustomNumeric Schedule to an application: -1. Define the Mapping for StartPointMapping and FinishPointMapping in TaskAttributeMapping. -1. Set the Gantt Schedule type as CustomNumeric. -2. Bind the GanttScheduleRowInfo collection to the CustomScheduleSource property of the Gantt. +1. Define the Mapping for [StartPointMapping](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TaskAttributeMapping.html#Syncfusion_Windows_Controls_Gantt_TaskAttributeMapping_StartPointMapping) and [FinishPointMapping](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TaskAttributeMapping.html#Syncfusion_Windows_Controls_Gantt_TaskAttributeMapping_FinishPointMapping) in [TaskAttributeMapping](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TaskAttributeMapping.html). +1. Set the Gantt [ScheduleType](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ScheduleType) as CustomNumeric. +2. Bind the [GanttScheduleRowInfo](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttScheduleRowInfo.html) collection to the [CustomScheduleSource](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_CustomScheduleSource) property of the Gantt. The following code illustrates Adding Custom Schedule to an Application: @@ -756,8 +756,8 @@ To view samples: To Add CustomDateTime Schedule to an application: -1. Define the Gantt Schedule type as CustomDateTime. -2. Bind the GanttScheduleRowInfo collection to the CustomScheduleSource property of the Gantt. +1. Define the Gantt [ScheduleType](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ScheduleType) as CustomDateTime. +2. Bind the [GanttScheduleRowInfo](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttScheduleRowInfo.html) collection to the [CustomScheduleSource](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_CustomScheduleSource) property of the Gantt. The following code illustrates this: diff --git a/wpf/Gantt/custom-tooltip.md b/wpf/Gantt/custom-tooltip.md index 90168646d2..7681ff9261 100644 --- a/wpf/Gantt/custom-tooltip.md +++ b/wpf/Gantt/custom-tooltip.md @@ -23,7 +23,7 @@ Type Data Type -ToolTipTemplate +[ToolTipTemplate](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ToolTipTemplate) Gets or set the TaskBarCollection Property of GanttControl Dependency Property DataTemplate @@ -410,7 +410,6 @@ public class ViewModel taskDetails[3].ChildCollection.Add((new Task() { ID = 20, Name = "Modify items as necessary", StartDate = new DateTime(2011, 8, 2), EndDate = new DateTime(2011, 8, 8), Progress = 20d })); taskDetails[3].ChildCollection.Add((new Task() { ID = 21, Name = "Post Implementation Progress", StartDate = new DateTime(2011, 8, 8), EndDate = new DateTime(2011, 8, 12), Progress = 30d })); - taskDetails[0].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 2, GanttTaskRelationship = GanttTaskRelationship.StartToStart }); taskDetails[0].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 3, GanttTaskRelationship = GanttTaskRelationship.StartToStart }); taskDetails[0].ChildCollection[3].Predecessor.Add(new Predecessor() { GanttTaskIndex = 3, GanttTaskRelationship = GanttTaskRelationship.StartToStart }); diff --git a/wpf/Gantt/data-binding.md b/wpf/Gantt/data-binding.md index 918976272a..b1c6beefec 100644 --- a/wpf/Gantt/data-binding.md +++ b/wpf/Gantt/data-binding.md @@ -11,13 +11,13 @@ documentation: ug ## TaskDetails Binding -Essential Gantt for WPF includes an built-in class called TaskDetails, which is inherited from the IGanttTask interface. A collection of the TaskDetails can be bounded as an ItemsSource for the GanttControl. +Essential Gantt for WPF includes an built-in class called [TaskDetails](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TaskDetails.html), which is inherited from the [IGanttTask](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.IGanttTask.html) interface. A collection of the [TaskDetails](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TaskDetails.html) can be bounded as an ItemsSource for the [GanttControl](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html). #### Use Case Scenarios -You can easily create the task details collection using the TaskDetails class or by creating a new class by inheriting the IGantt interface. +You can easily create the task details collection using the TaskDetails class or by creating a new class by inheriting the [IGanttTask](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.IGanttTask.html) interface. -Binding TaskDetails collection to Gantt Control +Binding [TaskDetails](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TaskDetails.html) collection to Gantt Control The following code illustrates how to bind the Task Details to the Gantt Control: @@ -82,7 +82,7 @@ public class ViewModel { get { - return taskDetails; + return this.taskDetails; } set { @@ -104,7 +104,6 @@ public class ViewModel taskDetails[0].Child.Add(new TaskDetails { TaskId = 5, TaskName = "Secure complete", StartDate = new DateTime(2011, 7, 14), FinishDate = new DateTime(2011, 7, 14), Progress = 20d }); taskDetails.Add(new TaskDetails { TaskId = 6, TaskName = "Risk Assessment", StartDate = new DateTime(2011, 7, 8), FinishDate = new DateTime(2011, 7, 24), Progress = 30d }); - taskDetails[1].Child.Add(new TaskDetails { TaskId = 7, TaskName = "Perform risk assessment", StartDate = new DateTime(2011, 7, 8), FinishDate = new DateTime(2011, 7, 21), Progress = 20d }); taskDetails[1].Child.Add(new TaskDetails { TaskId = 8, TaskName = "Evaluate risk assessment", StartDate = new DateTime(2011, 7, 8), FinishDate = new DateTime(2011, 7, 23), Progress = 30d }); taskDetails[1].Child.Add(new TaskDetails { TaskId = 9, TaskName = "Prepare contingency plans", StartDate = new DateTime(2011, 7, 12), FinishDate = new DateTime(2011, 7, 24), Progress = 30d }); @@ -151,9 +150,10 @@ To view samples: ## External Property Binding -Essential Gantt for WPF allow you to bind any type of IEnumerable source to Gantt.You can bind any collection to Gantt using the TaskAttributeMapping class. This will get the mapping name of the required fields from the underlying source. With this mapping the Gantt will get the required information to render the Chart nodes. +Essential Gantt for WPF allows you to bind any type of IEnumerable source to Gantt. You can bind any collection to Gantt using the [TaskAttributeMapping](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TaskAttributeMapping.html) class. This will get the mapping name of the required fields from the underlying source. With this mapping the Gantt will get the required information to render the Chart nodes. + +The following code illustrate how to map the properties using the [TaskAttributeMapping](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TaskAttributeMapping.html) class: -The following code illustrate how to map the properties using the TaskAttributeMapping class: {% tabs %} {% highlight xaml %} @@ -178,7 +178,6 @@ The following code illustrate how to map the properties using the TaskAttributeM {% endhighlight %} {% highlight c# %} - this.ganttControl.ItemsSource = new ViewModel().TaskDetails; // Task attribute mapping diff --git a/wpf/Gantt/datetime-indicator-customization.md b/wpf/Gantt/datetime-indicator-customization.md index a5f446f43b..1b9c5513c1 100644 --- a/wpf/Gantt/datetime-indicator-customization.md +++ b/wpf/Gantt/datetime-indicator-customization.md @@ -18,7 +18,7 @@ Essential Gantt provides support for indicating the current date or time in the These are all included in the CurrentDateLinePositions enum. -Essential Gantt allows you to customize the appearance of the DateTime indicator by using the CurrentDateLine property. +Essential Gantt allows you to customize the appearance of the DateTime indicator by using the [CurrentDateLine](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_CurrentDateLine) property. * Today: DateTime indicator will be positioned at the current date. * LoadedTime: DateTime indicator will be positioned at the Gantt control loaded time. @@ -42,13 +42,13 @@ Type Data Type -CurrentDateLine +[CurrentDateLine](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_CurrentDateLine) Get the user-defined line for the DateTime indicator. Dependency Property Line -StickCurrentDateLineTo +[StickCurrentDateLineTo](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_StickCurrentDateLineTo) Get/sets the StickCurrentDateLineTo property of the Gantt control.By default this is set to Today. Dependency Property EnumNoneTodayDynamic TimeLoaded TimeAbsolute @@ -58,8 +58,8 @@ EnumNoneTodayDynamic TimeLoaded TimeAbsolute Adding the DateTime indicator customization will change the appearance and position of the DateTime indicator. By default, the DateTime indicator will appear in the current date. The following steps explain how to add a customized DateTime indicator: -1. Set the StickCurrentDateLineTo value for positioning the DateTime indicator. By default this is set as Today. -2. Customize the appearance of the DateTime indicator using the CurrentDateLine API in the Gantt control. +1. Set the [StickCurrentDateLineTo](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_StickCurrentDateLineTo) value for positioning the DateTime indicator. By default this is set as Today. +2. Customize the appearance of the DateTime indicator using the [CurrentDateLine](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_CurrentDateLine) API in the Gantt control. The following code samples illustrate how to customize the DateTime indicator. {% tabs %} @@ -116,9 +116,9 @@ strokeArray.Add(5); strokeArray.Add(1); strokeArray.Add(5); -this.Gantt.CurrentDateLine.Stroke = Brushes.Green; -this.Gantt.CurrentDateLine.StrokeDashArray = strokeArray; -this.Gantt.CurrentDateLine.StrokeThickness = 1; +this.ganttControl.CurrentDateLine.Stroke = Brushes.Green; +this.ganttControl.CurrentDateLine.StrokeDashArray = strokeArray; +this.ganttControl.CurrentDateLine.StrokeThickness = 1; {% endhighlight %} diff --git a/wpf/Gantt/dependency-relationship.md b/wpf/Gantt/dependency-relationship.md index 06af8328db..f6270a4ae6 100644 --- a/wpf/Gantt/dependency-relationship.md +++ b/wpf/Gantt/dependency-relationship.md @@ -44,14 +44,14 @@ Data Type Reference links -Predecessor +[Predecessor](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.Predecessor.html) This enables you to set the relationship between the tasks. Object Object NA -GanttTaskRelationship +[GanttTaskRelationship](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.Predecessor.html#Syncfusion_Windows_Controls_Gantt_Predecessor_GanttTaskRelationship) This contains four relationships. They are: * StartToStart @@ -339,7 +339,6 @@ public class ViewModel /// private ObservableCollection GetDataSource() { - var taskDetails = new ObservableCollection(); taskDetails.Add(new Task() { ID = 1, Name = "Analysis/Planning", StartDate = new DateTime(2011, 7, 3), EndDate = new DateTime(2011, 8, 14), Progress = 40d }); taskDetails[0].ChildCollection.Add((new Task() { ID = 2, Name = "IDentify Components to be Localized", StartDate = new DateTime(2011, 7, 3), EndDate = new DateTime(2011, 7, 5), Progress = 20d })); @@ -355,7 +354,6 @@ public class ViewModel taskDetails[1].ChildCollection.Add((new Task() { ID = 11, Name = "User Assistance Components", StartDate = new DateTime(2011, 7, 10), EndDate = new DateTime(2011, 7, 14), Progress = 10d })); taskDetails[1].ChildCollection.Add((new Task() { ID = 12, Name = "Software components Progress", StartDate = new DateTime(2011, 7, 14), EndDate = new DateTime(2011, 7, 18), Progress = 10d })); - taskDetails.Add(new Task() { ID = 13, Name = "Quality Assurance", StartDate = new DateTime(2011, 7, 3), EndDate = new DateTime(2011, 7, 12), Progress = 40d, }); taskDetails[2].ChildCollection.Add((new Task() { ID = 14, Name = "Review project information", StartDate = new DateTime(2011, 7, 3), EndDate = new DateTime(2011, 7, 15), Progress = 20d })); taskDetails[2].ChildCollection.Add((new Task() { ID = 15, Name = "Localization Component", StartDate = new DateTime(2011, 7, 6), EndDate = new DateTime(2011, 7, 8), Progress = 20d })); @@ -430,7 +428,7 @@ Essential Gantt provides support for dynamic editing of predecessors in the Grid You can add/remove/update the predecessors and resources of tasks at run time. Initially, the Gantt is loaded with the Predecessor/Resource information in the underlying collection and you can update this information if required. -You can edit the predecessor information from the GanttGrid. For resource, you can edit in the underlying source, Gantt will listen to the change in the underlying source and reflect it in both GanttGrid and GanttChart. +You can edit the predecessor information from the [GanttGrid](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttGrid.html). For resource, you can edit in the underlying source, Gantt will listen to the change in the underlying source and reflect it in both [GanttGrid](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttGrid.html) and [GanttChart](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttChart.html). ## Predecessor Validation @@ -451,7 +449,7 @@ Data Type Reference links -ValidationMode +[ValidationMode](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ValidationMode) This contains two modes.
  • Manual,
  • Auto.
@@ -479,7 +477,7 @@ While creating a new predecessor in Grid, it should be in the following format: {% endhighlight %} -Here the {GanttTaskRelationship} is any one of the following: +Here the {[GanttTaskRelationship](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttTaskRelationship.html)} is any one of the following: * SS * FS @@ -497,7 +495,7 @@ If any other data is added, the current editing relationship will be deleted and #### Editing Resources -As of now, resources cannot be edited in Grid. You can update the resource collection in the underlying source whenever you need. Gantt will listen to the changes in the collection and will update the GanttGrid and GanttChart accordingly. +As of now, resources cannot be edited in Grid. You can update the resource collection in the underlying source whenever you need. Gantt will listen to the changes in the collection and will update the [GanttGrid](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttGrid.html) and [GanttChart](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttChart.html) accordingly. #### Use Case Scenario diff --git a/wpf/Gantt/drag-drop.md b/wpf/Gantt/drag-drop.md index 9b92dcc57f..936c5d8dab 100644 --- a/wpf/Gantt/drag-drop.md +++ b/wpf/Gantt/drag-drop.md @@ -8,7 +8,7 @@ documentation: ug --- # Drag and drop support in GanttControl -The WPF `GanttControl` allows you to reorder rows and columns within the `GanttGrid` and rearrange nodes in the `GanttChart` by dragging and dropping them. You can disable drag and drop by setting the `AllowDragDrop` property to false. The default value is `true`. +The WPF [GanttControl](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html) allows you to reorder rows and columns within the [GanttGrid](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttGrid.html) and rearrange nodes in the [GanttChart](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttChart.html) by dragging and dropping them. You can disable drag and drop by setting the [AllowDragDrop](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_AllowDragDrop) property to false. The default value is `true`. ![drag-and-drop-in-wpf-gantt-control](Drag-drop-images/drag-and-drop-in-wpf-gantt-control.gif) @@ -26,7 +26,7 @@ this.ganttControl.AllowDragDrop = false; {% endtabs %} ## Handle node drag starting in gantt grid -You can get the node details and handle whether the node can be draggable or not by using the `TreeGridNodeDragStarting` event. This event will be triggered when the node is started dragging. The `TreeGridNodeDragStartingEventArgs` argument contains the `Nodes` property which gets the nodes that contain the associated data while dragging the rows. +You can get the node details and handle whether the node can be draggable or not by using the [TreeGridNodeDragStarting](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_TreeGridNodeDragStarting) event. This event will be triggered when the node is started dragging. The [TreeGridNodeDragStartingEventArgs](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TreeGridNodeDragStartingEventArgs.html) argument contains the [Nodes](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TreeGridNodeDragStartingEventArgs.html#Syncfusion_Windows_Controls_Gantt_TreeGridNodeDragStartingEventArgs_Nodes) property which gets the nodes that contain the associated data while dragging the rows. {% tabs %} {% highlight xaml %} @@ -52,7 +52,7 @@ private void OnGanttControlTreeGridNodeDragStarting(object sender, TreeGridNodeD {% endtabs %} ## Handle node dragging in gantt grid -You can get the dragging node details in gantt grid by using the `TreeGridNodeDragging` event. This event will be continuously triggered when the node is being dragged. The `TreeGridNodeDraggingEventArgs` argument contains the `Nodes` property which gets the nodes that are being dragged. +You can get the dragging node details in gantt grid by using the [TreeGridNodeDragging](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_TreeGridNodeDragging) event. This event will be continuously triggered when the node is being dragged. The [TreeGridNodeDraggingEventArgs](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TreeGridNodeDraggingEventArgs.html) argument contains the [Nodes](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TreeGridNodeDraggingEventArgs.html#Syncfusion_Windows_Controls_Gantt_TreeGridNodeDraggingEventArgs_Nodes) property which gets the nodes that are being dragged. {% tabs %} {% highlight xaml %} @@ -77,10 +77,10 @@ private void OnGanttControlTreeGridNodeDragging(object sender, TreeGridNodeDragg {% endtabs %} ## Handle node drop in gantt grid -Using the `TreeGridNodeDrop` event you can get the dropping node details, target node, and you can handle whether the node can be dropped to the specific position or not. This event will trigger after dropping the node. The `TreeGridNodeDropEventArgs` argument contains the following properties. +Using the [TreeGridNodeDrop](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_TreeGridNodeDrop) event you can get the dropping node details, target node, and you can handle whether the node can be dropped to the specific position or not. This event will trigger after dropping the node. The [TreeGridNodeDropEventArgs](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TreeGridNodeDropEventArgs.html) argument contains the following properties. -* `Nodes` - Gets the item that contains the associated data. -* `TargetNode` - Gets a value indicating the target node which is going to drop. +* [Nodes](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TreeGridNodeDropEventArgs.html#Syncfusion_Windows_Controls_Gantt_TreeGridNodeDropEventArgs_Nodes) - Gets the item that contains the associated data. +* [TargetNode](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TreeGridNodeDropEventArgs.html#Syncfusion_Windows_Controls_Gantt_TreeGridNodeDropEventArgs_TargetNode) - Gets a value indicating the target node which is going to drop. {% tabs %} {% highlight xaml %} @@ -107,15 +107,15 @@ private void OnGanttControlTreeGridNodeDrop(object sender, TreeGridNodeDropEvent {% endtabs %} ## Handle drag and drop in gantt chart -You can get the dragging and dropping node details in gantt chart by using the `NodeDragDelta` and `NodeDragCompleted` events. The `NodeDragAndDropEventArgs` argument contains the following properties. - -* `Node` - Gets or sets the node. -* `HorizontalChange` - Gets or sets the horizontal change. -* `StartTime` - Gets or sets the start time. -* `EndTime` - Gets or sets the end time. -* `Start` - Gets or sets the start. -* `End` - Gets or sets the end. -* `NodePresenter` - Gets the node parent. +You can get the dragging and dropping node details in gantt chart by using the [NodeDragDelta](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_NodeDragDelta) and [NodeDragCompleted](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_NodeDragCompleted) events. The [NodeDragAndDropEventArgs](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.NodeDragAndDropEventArgs.html) argument contains the following properties. + +* [Node](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.NodeDragAndDropEventArgs.html#Syncfusion_Windows_Controls_Gantt_NodeDragAndDropEventArgs_Node) - Gets or sets the node. +* [HorizontalChange](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.NodeDragAndDropEventArgs.html#Syncfusion_Windows_Controls_Gantt_NodeDragAndDropEventArgs_HorizontalChange) - Gets or sets the horizontal change. +* [StartTime](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.NodeDragAndDropEventArgs.html#Syncfusion_Windows_Controls_Gantt_NodeDragAndDropEventArgs_StartTime) - Gets or sets the start time. +* [EndTime](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.NodeDragAndDropEventArgs.html#Syncfusion_Windows_Controls_Gantt_NodeDragAndDropEventArgs_EndTime) - Gets or sets the end time. +* [Start](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.NodeDragAndDropEventArgs.html#Syncfusion_Windows_Controls_Gantt_NodeDragAndDropEventArgs_Start) - Gets or sets the start. +* [End](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.NodeDragAndDropEventArgs.html#Syncfusion_Windows_Controls_Gantt_NodeDragAndDropEventArgs_End) - Gets or sets the end. +* [NodePresenter](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.NodeDragAndDropEventArgs.html#Syncfusion_Windows_Controls_Gantt_NodeDragAndDropEventArgs_NodePresenter) - Gets the node parent. ### Handle node dragging in Gantt chart {% tabs %} diff --git a/wpf/Gantt/filtering-sorting.md b/wpf/Gantt/filtering-sorting.md index 7da00505ea..b6a5ce905a 100644 --- a/wpf/Gantt/filtering-sorting.md +++ b/wpf/Gantt/filtering-sorting.md @@ -8,11 +8,11 @@ documentation: ug --- # Filtering and sorting support in GanttControl -`Filtering` is the process of retrieving values from a collection that satisfy specified conditions. In the `GanttControl`, filtering can be applied through the user interface, allowing users to narrow down the displayed data based on their criteria. -Additionally, the `GanttControl` enables sorting of data against one or more columns in either ascending or descending order. When sorting is applied, the rows are rearranged based on the specified sort criteria, providing users with organized and easily navigable data views. +`Filtering` is the process of retrieving values from a collection that satisfy specified conditions. In the [GanttControl](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html), filtering can be applied through the user interface, allowing users to narrow down the displayed data based on their criteria. +Additionally, the [GanttControl](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html) enables sorting of data against one or more columns in either ascending or descending order. When sorting is applied, the rows are rearranged based on the specified sort criteria, providing users with organized and easily navigable data views. ## Filtering -The `GanttControl` provides an Excel-inspired filtering UI with various options to easily filter data. Filtering can be enabled by setting the `AllowFiltering` property of `GanttControl` to `true`. This allows users to open the filter UI by clicking the filter icon on the column header to filter the nodes. The default value of the `AllowFiltering` property is `false`. +The [GanttControl](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html) provides an Excel-inspired filtering UI with various options to easily filter data. Filtering can be enabled by setting the [AllowFiltering](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_AllowFiltering) property of [GanttControl](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html) to `true`. This allows users to open the filter UI by clicking the filter icon on the column header to filter the nodes. The default value of the [AllowFiltering](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_AllowFiltering) property is `false`. ![filtering-in-wpf-gantt-control](Filtering-sorting-images/filtering-in-wpf-gantt-control.gif) @@ -30,7 +30,7 @@ this.ganttControl.AllowFiltering = true; N> By default, the WPF GanttControl uses the `Extended` filter level. This setting ensures that all parent nodes of any node that meets the filter criteria are shown. ## Sorting -The `GanttControl` allows you to sort column data in either ascending or descending order. When sorting is applied, the rows are rearranged based on the specified sort criteria. You can sort the data by touching or clicking the column header. Sorting can be enabled by setting the `AllowSorting` property to `true`. +The [GanttControl](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html) allows you to sort column data in either ascending or descending order. When sorting is applied, the rows are rearranged based on the specified sort criteria. You can sort the data by touching or clicking the column header. Sorting can be enabled by setting the [AllowSorting](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_AllowSorting) property to `true`. ![sorting-in-wpf-gantt-control](Filtering-sorting-images/sorting-in-wpf-gantt-control.gif) diff --git a/wpf/Gantt/getting-started.md b/wpf/Gantt/getting-started.md index 676781c89d..b76747c934 100644 --- a/wpf/Gantt/getting-started.md +++ b/wpf/Gantt/getting-started.md @@ -60,12 +60,24 @@ The following features are available in the Essential Gantt for WPF: * Data Binding * TaskDetails Binding * External Property Binding -* Dependency relationship +* Dependency Relationship +* Auto Update Hierarchy +* Baseline Support * CustomToolTip -* Calendar customization -* Custom Node style -* VisualStyle +* Custom Schedule +* Calendar Customization +* Holidays Customization +* Zooming +* Drag and Drop +* Filtering and Sorting +* Highlighting Tasks +* Custom Node Style +* DateTime Indicator Customization +* Resource View Gantt Inline Items +* Strip Lines * XML Import/Export +* Flow Direction +* Localization ## Adding GanttControl to an application @@ -128,13 +140,16 @@ this.Content = ganttControl; public class ViewModel { + /// + /// Holds the collection value. + /// + private ObservableCollection taskDetails; + public ViewModel() { - taskDetails = this.GetTaskDetails(); + this.taskDetails = this.GetTaskDetails(); } - private ObservableCollection taskDetails; - /// /// Gets or sets the task collection. /// @@ -143,11 +158,11 @@ public class ViewModel { get { - return taskDetails; + return this.taskDetails; } set { - taskDetails = value; + this.taskDetails = value; } } @@ -166,7 +181,6 @@ public class ViewModel taskDetails[0].Child.Add(new TaskDetails { TaskId = 5, TaskName = "Secure complete", StartDate = new DateTime(2011, 7, 14), FinishDate = new DateTime(2011, 7, 14), Progress = 20d }); taskDetails.Add(new TaskDetails { TaskId = 6, TaskName = "Risk Assessment", StartDate = new DateTime(2011, 7, 8), FinishDate = new DateTime(2011, 7, 24), Progress = 30d }); - taskDetails[1].Child.Add(new TaskDetails { TaskId = 7, TaskName = "Perform risk assessment", StartDate = new DateTime(2011, 7, 8), FinishDate = new DateTime(2011, 7, 21), Progress = 20d }); taskDetails[1].Child.Add(new TaskDetails { TaskId = 8, TaskName = "Evaluate risk assessment", StartDate = new DateTime(2011, 7, 8), FinishDate = new DateTime(2011, 7, 23), Progress = 30d }); taskDetails[1].Child.Add(new TaskDetails { TaskId = 9, TaskName = "Prepare contingency plans", StartDate = new DateTime(2011, 7, 12), FinishDate = new DateTime(2011, 7, 24), Progress = 30d }); diff --git a/wpf/Gantt/highlighting-tasks.md b/wpf/Gantt/highlighting-tasks.md index 6f702febf1..6029b2ea01 100644 --- a/wpf/Gantt/highlighting-tasks.md +++ b/wpf/Gantt/highlighting-tasks.md @@ -27,13 +27,13 @@ Type Data Type -HighlightedItems +[HighlightedItems](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_HighlightedItems) The items that are passed through this API will be highlighted in Gantt chart region. The items should be in linear form. Dependency IList -HighlightItemBrush +[HighlightItemBrush](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_HighlightItemBrush) Specifies the color in which items should be highlight Dependency Brush @@ -45,8 +45,8 @@ Brush To highlight a set of tasks in Gantt chart region: 1. Define the Gantt with initial setup. -1. Bind the tasks that need to be highlighted with Gantt’s HighlightedItems API. -2. If required, change the value of the Gantt’s HighlightItemBrush API to change the item highlight color. The default color is red. +1. Bind the tasks that need to be highlighted with Gantt’s [HighlightedItems](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_HighlightedItems) API. +2. If required, change the value of the Gantt’s [HighlightItemBrush](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_HighlightItemBrush) API to change the item highlight color. The default color is red. {% capture codesnippet1 %} {% tabs %} @@ -274,7 +274,7 @@ this.ganttControl.TaskAttributeMapping = taskAttributeMapping; { get { - return endDate; + return this.endDate; } set { @@ -286,7 +286,7 @@ this.ganttControl.TaskAttributeMapping = taskAttributeMapping; this.endDate = value; } else - endDate = value; + this.endDate = value; this.RaisePropertyChanged("EndDate"); /// Duration changed is invoked to notify the chagne in duration based on the new end date. this.RaisePropertyChanged("Duration"); diff --git a/wpf/Gantt/holidays-customization.md b/wpf/Gantt/holidays-customization.md index be6cb6b1ec..1f52b7bdce 100644 --- a/wpf/Gantt/holidays-customization.md +++ b/wpf/Gantt/holidays-customization.md @@ -11,21 +11,21 @@ documentation: ug The GanttControl allows customers to differentiate the dates of holidays. This support is used to highlight the holidays in the Gantt chart. -The holidays can be specified using the `Holidays` property in the SfGantt, which holds a collection of `GanttHoliday`. +The holidays can be specified using the [Holidays](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_Holidays) property in the SfGantt, which holds a collection of [GanttHoliday](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttHoliday.html). The following properties in the GanttHoliday are used to define the holidays: -* `Day`: Specifies the holiday date. +* [Day](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttHoliday.html#Syncfusion_Windows_Controls_Gantt_GanttHoliday_Day): Specifies the holiday date. -* `Background`: Specifies the brush to highlight the holiday. +* [Background](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttHoliday.html#Syncfusion_Windows_Controls_Gantt_GanttHoliday_Background): Specifies the brush to highlight the holiday. N> If the background is not defined, then the Non-WorkingDays background will be applied. The following properties in the GanttControl are used to customize the holiday feature: -* `ShowHolidays`: Indicates whether to enable or disable the holidays in the Gantt chart. +* [ShowHolidays](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ShowHolidays): Indicates whether to enable or disable the holidays in the Gantt chart. -* `ExcludeHolidays`: Indicates whether to include or exclude the holidays in duration calculation. +* [ExcludeHolidays](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ExcludeHolidays): Indicates whether to include or exclude the holidays in duration calculation. The following code sample demonstrates how to define the holidays. @@ -167,7 +167,6 @@ public partial class MainWindow : Window taskDetails[1].Child.Add((new TaskDetails() { TaskId = 11, TaskName = "User Assistance Components", StartDate = new DateTime(2011, 7, 10), FinishDate = new DateTime(2011, 7, 14), Progress = 10d })); taskDetails[1].Child.Add((new TaskDetails() { TaskId = 12, TaskName = "Software components complete", StartDate = new DateTime(2011, 7, 14), FinishDate = new DateTime(2011, 7, 19), Progress = 10d })); - taskDetails.Add(new TaskDetails() { TaskId = 13, TaskName = "Quality Assurance", StartDate = new DateTime(2011, 7, 3), FinishDate = new DateTime(2011, 7, 12), Progress = 40d, }); taskDetails[2].Child.Add((new TaskDetails() { TaskId = 14, TaskName = "Review project information", StartDate = new DateTime(2011, 7, 3), FinishDate = new DateTime(2011, 7, 15), Progress = 20d })); taskDetails[2].Child.Add((new TaskDetails() { TaskId = 15, TaskName = "Localization Component", StartDate = new DateTime(2011, 7, 6), FinishDate = new DateTime(2011, 7, 8), Progress = 20d })); diff --git a/wpf/Gantt/import-and-export-support.md b/wpf/Gantt/import-and-export-support.md index 2a56a55a42..c39f741dae 100644 --- a/wpf/Gantt/import-and-export-support.md +++ b/wpf/Gantt/import-and-export-support.md @@ -22,13 +22,13 @@ Type Data Type -ImportFromXMLCommand +[ImportFromXMLCommand](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ImportFromXMLCommand) Command binding used to import the XML file generated from MS Project to populate data’s in Gantt control. Command DelegateCommand -ExportToXMLCommand +[ExportToXMLCommand](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ExportToXMLCommand) Command binding used to export the XML file generated from Gantt control to populate data’s in MS Project. Command DelegateCommand @@ -47,14 +47,14 @@ Type Return Type -ExportToXML() +[ExportToXML()](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ExportToXML) Responsible for exporting the GanttControl to MSProject XML File. - - bool -ImportFromXML() +[ImportFromXML()](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ImportFromXML) Responsible for importing the data from MS Project XML file to GanttControl. - - diff --git a/wpf/Gantt/localization.md b/wpf/Gantt/localization.md index ecfae92139..741a5fe30c 100644 --- a/wpf/Gantt/localization.md +++ b/wpf/Gantt/localization.md @@ -10,7 +10,7 @@ documentation: ug # Localization in WPF Gantt -Localization is the process of translating the application resources into different language for the specific cultures. You can localize the GanttControl by [adding resource file](https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/aa992030(v=vs.100)). Application culture can be changed by setting `CurrentUICulture` and `CurrentCulture` before `InitializeComponent()` method. +Localization is the process of translating the application resources into different language for the specific cultures. You can localize the [GanttControl](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html) by [adding resource file](https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/aa992030(v=vs.100)). Application culture can be changed by setting `CurrentUICulture` and `CurrentCulture` before `InitializeComponent()` method. In the below application, culture is configured to French language. @@ -28,7 +28,7 @@ public MainWindow() {% endtabs %} -To localize the GanttControl based on `CurrentUICulture` using resource files, follow the below steps. +To localize the [GanttControl](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html) based on `CurrentUICulture` using resource files, follow the below steps. 1.Create new folder and named as **Resources** in your application. 2.Add the default resource file of GanttControl into **Resources** folder. You can download the Syncfusion.Gantt.WPF.resx [here](http://www.syncfusion.com/downloads/support/directtrac/general/ze/Resources-2137559261.zip). diff --git a/wpf/Gantt/migration-to-26v-or-higher.md b/wpf/Gantt/migration-to-26v-or-higher.md index 7526d00bba..47ef12c3cd 100644 --- a/wpf/Gantt/migration-to-26v-or-higher.md +++ b/wpf/Gantt/migration-to-26v-or-higher.md @@ -49,7 +49,7 @@ Syncfusion.Windows.Controls.Gantt.Chart -{{'[GanttGrid](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.Grid.GanttGrid.html)'| markdownify }} +{{'[GanttGrid](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttGrid.html)'| markdownify }} {{'[GridTreeControl](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Grid.GridTreeControl.html)'| markdownify }} {{'[SfTreeGrid](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.TreeGrid.SfTreeGrid.html)'| markdownify }} diff --git a/wpf/Gantt/resource-view-gantt-inline-items.md b/wpf/Gantt/resource-view-gantt-inline-items.md index f0af942df2..4cc2a091c1 100644 --- a/wpf/Gantt/resource-view-gantt-inline-items.md +++ b/wpf/Gantt/resource-view-gantt-inline-items.md @@ -11,7 +11,7 @@ documentation: ug By default, the Gantt chart will display a single node in a row. This helps you to manage the project. When you want to manage the resources in a project, you need multiple nodes in a single row. A Resource view Gantt enables you to manage the resources involved in a project. -In a normal Gantt, a node represents a task or activity of the project. In a resource view Gantt, the node represents task assigned to a resource. Multiple tasks assigned to a resource can be displayed in a single row. You can achieve this by using the mapping attribute of the InLineTaskMapping. +In a normal Gantt, a node represents a task or activity of the project. In a resource view Gantt, the node represents task assigned to a resource. Multiple tasks assigned to a resource can be displayed in a single row. You can achieve this by using the mapping attribute of the [InLineTaskMapping](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TaskAttributeMapping.html#Syncfusion_Windows_Controls_Gantt_TaskAttributeMapping_InLineTaskMapping). Essential Gantt will listen to the dynamic inclusion of inline items and refresh the chart region. @@ -42,7 +42,7 @@ Example: A very big development project that contains multiple phases to complet ## Adding Inline Items to an Application -You can populate a resource view Gantt by populating the collection of tasks in a single row by mapping the corresponding field in the underlying source to the InLineTaskMapping. +You can populate a resource view Gantt by populating the collection of tasks in a single row by mapping the corresponding field in the underlying source to the [InLineTaskMapping](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TaskAttributeMapping.html#Syncfusion_Windows_Controls_Gantt_TaskAttributeMapping_InLineTaskMapping). You can populate a Resource view Gantt for both date-time schedules and numeric schedules. @@ -51,7 +51,7 @@ You can populate a Resource view Gantt for both date-time schedules and numeric To populate a Resource view Gantt in a Custom Numeric Schedule: 1. Define the Gantt with a custom numeric schedule source. For more information about custom numeric schedules, visit the following link: -2. You can populate the collection of tasks in a single row by mapping the corresponding field in the underlying source to the InLineTaskMapping. +2. You can populate the collection of tasks in a single row by mapping the corresponding field in the underlying source to the [InLineTaskMapping](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TaskAttributeMapping.html#Syncfusion_Windows_Controls_Gantt_TaskAttributeMapping_InLineTaskMapping). {% tabs %} {% highlight xaml %} @@ -641,7 +641,7 @@ The following shows the Resultant output: To populate the Resource view Gantt with a date-time schedule: 1. Define the Gantt with DateTime values. -2. Populate the collection of tasks in a single row by mapping the corresponding field in the underlying source to the InLineTaskMapping. +2. Populate the collection of tasks in a single row by mapping the corresponding field in the underlying source to the [InLineTaskMapping](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.TaskAttributeMapping.html#Syncfusion_Windows_Controls_Gantt_TaskAttributeMapping_InLineTaskMapping). {% tabs %} {% highlight xaml %} diff --git a/wpf/Gantt/strip-lines.md b/wpf/Gantt/strip-lines.md index 4a135499f5..0b7c8e1151 100644 --- a/wpf/Gantt/strip-lines.md +++ b/wpf/Gantt/strip-lines.md @@ -54,103 +54,103 @@ Type Data Type -Background +[Background](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.StripLineInfo.html#Syncfusion_Windows_Controls_Gantt_StripLineInfo_Background) Gets/sets background color of strip line. CLR Brush -Content +[Content](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.StripLineInfo.html#Syncfusion_Windows_Controls_Gantt_StripLineInfo_Content) Gets/sets the content of the strip line. CLR Object -ContentTemplate +[ContentTemplate](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.StripLineInfo.html#Syncfusion_Windows_Controls_Gantt_StripLineInfo_ContentTemplate) Gets/sets the content template of the strip line. CLR DataTemplate -ContentTemplateSelector +[ContentTemplateSelector](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.StripLineInfo.html#Syncfusion_Windows_Controls_Gantt_StripLineInfo_ContentTemplateSelector) Gets/sets the TemplateSelector of the strip line. CLR DataTemplateSelector -StartDate +[StartDate](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.StripLineInfo.html#Syncfusion_Windows_Controls_Gantt_StripLineInfo_StartDate) Gets/sets the start date of the strip line. CLR DateTime -EndDate +[EndDate](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.StripLineInfo.html#Syncfusion_Windows_Controls_Gantt_StripLineInfo_EndDate) Gets/sets the end date of the strip line. CLR DateTime -RepeatBehavior +[RepeatBehavior](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.StripLineInfo.html#Syncfusion_Windows_Controls_Gantt_StripLineInfo_RepeatBehavior) Gets/sets the repeat behavior of the strip line. CLR Repeat (Enum) -RepeatFor +[RepeatFor](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.StripLineInfo.html#Syncfusion_Windows_Controls_Gantt_StripLineInfo_RepeatFor) Gets/sets the intervals between the repeating strip lines. CLR Integer -RepeatUpto +[RepeatUpto](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.StripLineInfo.html#Syncfusion_Windows_Controls_Gantt_StripLineInfo_RepeatUpto) Gets/sets DateTime value. The strip line will be repeated up to this value. CLR DateTime -Style +[Style](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.StripLineInfo.html#Syncfusion_Windows_Controls_Gantt_StripLineInfo_Style) Gets/sets the style for the strip line. CLR Style -StyleSelector +[StyleSelector](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.StripLineInfo.html#Syncfusion_Windows_Controls_Gantt_StripLineInfo_StyleSelector) Gets/sets the style selector of the strip line. CLR StyleSelector -VerticalContentAlignment +[VerticalContentAlignment](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.StripLineInfo.html#Syncfusion_Windows_Controls_Gantt_StripLineInfo_VerticalContentAlignment) Gets/sets the vertical alignment of the content present in the strip line. CLR VerticalAlignment -HorizontalContentAlignment +[HorizontalContentAlignment](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.StripLineInfo.html#Syncfusion_Windows_Controls_Gantt_StripLineInfo_HorizontalContentAlignment) Gets/sets the horizontal alignment of the content present in the strip line. CLR Horizontal Alignment -Type +[Type](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.StripLineInfo.html#Syncfusion_Windows_Controls_Gantt_StripLineInfo_Type) Gets/sets the type of the strip line. CLR StriplineType(Enum) -Position +[Position](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.StripLineInfo.html#Syncfusion_Windows_Controls_Gantt_StripLineInfo_Position) Gets/sets the absolute position of the strip line for Absolute strip line type. CLR Point -Height +[Height](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.StripLineInfo.html#Syncfusion_Windows_Controls_Gantt_StripLineInfo_Height) Gets/sets the absolute height of the strip line for Absolute strip line type. CLR Double -Width +[Width](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.StripLineInfo.html#Syncfusion_Windows_Controls_Gantt_StripLineInfo_Width) Get/sets the absolute width of the strip line for Absolute strip line type. CLR Double @@ -173,13 +173,13 @@ Type Data Type -ShowStripLines +[ShowStripLines](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ShowStripLines) Get the user option to show the strip lines. Dependency Property Bool -StripLines +[StripLines](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_StripLines) Get/sets the collection of StripLineInfo from the user. Dependency Property IEnumerable @@ -197,11 +197,11 @@ Property Description -Repeat +[Repeat](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.Repeat.html) This property contains the following values:Year: Repeating the strip line on a yearly basis depends on the RepeatFor value in StripLineInfo.Month: Repeating the strip line on a monthly basis depends on the RepeatFor value in StripLineInfo.Week: Repeating the strip line on a weekly basis depends on the RepeatFor value in StripLineInfo.Day: Repeating the strip line on a daily basis depends on the RepeatFor value in StripLineInfo.Hour: Repeating the strip line on an hourly basis depends on the RepeatFor value in StripLineInfo.Minute: Repeating the strip line on per-minute basis depends on the RepeatFor value in StripLineInfo. -StriplineType +[StriplineType](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.StriplineType.html#fields) This property contains the following values:Regular: This denotes the normal strip line.Absolute: This denotes the absolute strip line. You can customize the position, size, and appearance of the strip line in this type. @@ -219,7 +219,7 @@ Arguments Type -StripLineCreated +[StripLineCreated](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_StripLineCreated) Whenever a strip line is created, this event will be triggered. the handler of the event will have the newly created strip line (StripLineInfo) in the argument.By handling this event, you can customize the appearance of the strip line. StripLineCreated(object sender, StriplineCreatedEventArgs args) Event diff --git a/wpf/Gantt/zooming.md b/wpf/Gantt/zooming.md index d08f2ed900..4fda5da121 100644 --- a/wpf/Gantt/zooming.md +++ b/wpf/Gantt/zooming.md @@ -26,8 +26,8 @@ Built-in zooming allows you to zoom in and zoom out of the schedule rows. The bu To add the built-in zooming: 1. Define the Gantt with initial values. -2. Set the UseOnDemandSchedule API value as _true_. If need set BaseCellMinLength and BaseCellMaxLength, the default value of these APIs are 20 and 40 respectively. -3. Use a slider or any control to provide the zoom factor dynamically. Bind the Gantt’s zoom factor to that control value. +2. Set the [UseOnDemandSchedule](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_UseOnDemandSchedule) API value as _true_. If need to set [BaseCellMinLength](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_BaseCellMinLength) and [BaseCellMaxLength](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_BaseCellMaxLength), the default value of these APIs are 20 and 40 respectively. +3. Use a slider or any control to provide the zoom factor dynamically. Bind the Gantt’s [ZoomFactor](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ZoomFactor) to that control value. {% capture codesnippet1 %} {% tabs %} @@ -256,10 +256,10 @@ When you like to view tasks that are scheduled on a month unit in the day/hours To add custom zooming: 1. Define the Gantt with initial values. -2. Set the UseOnDemandSchedule API value as true. -3. If needed, set BaseCellMinLength and BaseCellMaxLength. The default value of these APIs are 20 and 40 respectively. -4. Use any control to provide the zoom factor dynamically. Bind the Gantt’s zoom factor to that control value. -5. Handle the ZoomChanged event handler in code behind and change the schedule row information in that event handler as illustrated in the following code example: +2. Set the [UseOnDemandSchedule](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_UseOnDemandSchedule) API value as true. +3. If needed, set [BaseCellMinLength](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_BaseCellMinLength) and [BaseCellMaxLength](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_BaseCellMaxLength). The default value of these APIs are 20 and 40 respectively. +4. Use any control to provide the zoom factor dynamically. Bind the Gantt’s [ZoomFactor](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ZoomFactor) to that control value. +5. Handle the [ZoomChanged](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ZoomChanged) event handler in code behind and change the schedule row information in that event handler as illustrated in the following code example: {% capture codesnippet2 %} {% tabs %} @@ -574,25 +574,25 @@ Type Data Type -UseOnDemandSchedule +[UseOnDemandSchedule](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_UseOnDemandSchedule) To get the expected performance you need to use dynamic schedule rendering. Dependency boolean -BaseCellMaxLength +[BaseCellMaxLength](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_BaseCellMaxLength) Splits the schedule cells by comparing the cell size with the API value on zooming-in Dependency double -BaseCellMinLength +[BaseCellMinLength](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_BaseCellMinLength) Merges schedule cells by comparing the cell size with the API value on zooming-out Dependency double -ZoomFactor +[ZoomFactor](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ZoomFactor) Zooming takes place based on the ZoomFactor. The ZoomFactor should be greater than zero. Dependency double @@ -610,7 +610,7 @@ Arguments Type -ZoomChanged +[ZoomChanged](https://help.syncfusion.com/cr/wpf/Syncfusion.Windows.Controls.Gantt.GanttControl.html#Syncfusion_Windows_Controls_Gantt_GanttControl_ZoomChanged) Event triggers when the zoom factor is changed. This can be handled in application level. ZoomChangedEventArgs Simple event From 00801676a5b064fc2544fbbccef7618bb35b7781 Mon Sep 17 00:00:00 2001 From: TamilarasanGunasekaran Date: Tue, 25 Jun 2024 20:11:39 +0530 Subject: [PATCH 14/21] CI issue resolved --- .../localization-in-wpf-gantt-control.png | Bin 116709 -> 35140 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/wpf/Gantt/Localization_images/localization-in-wpf-gantt-control.png b/wpf/Gantt/Localization_images/localization-in-wpf-gantt-control.png index d07745e68c12c7380acfbb89ca4489302f54b1e8..f77944ee8c2ccaf947e383510a5787749e8edf55 100644 GIT binary patch literal 35140 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 literal 116709 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'=XjFNnCs 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 fw*M{`;pY#`VYn!xA;05)AWKF Date: Tue, 25 Jun 2024 23:31:57 +0530 Subject: [PATCH 15/21] WPF 886828 - Updated Gantt UG review corrections --- wpf/Gantt/baseline-support.md | 1308 ++++++++++++++++++++++-- wpf/Gantt/import-and-export-support.md | 38 +- wpf/Gantt/zooming.md | 2 +- 3 files changed, 1239 insertions(+), 109 deletions(-) diff --git a/wpf/Gantt/baseline-support.md b/wpf/Gantt/baseline-support.md index 4f4623d9ae..778796a3f7 100644 --- a/wpf/Gantt/baseline-support.md +++ b/wpf/Gantt/baseline-support.md @@ -108,6 +108,12 @@ taskAttributeMapping.PredecessorMapping = "Predecessor"; taskAttributeMapping.ResourceInfoMapping = "Resource"; this.ganttControl.TaskAttributeMapping = taskAttributeMapping; +// To load the Variance Table View +this.ganttControl.LoadVarianceTableView(); + +// To load the Default [Editing] View +this.ganttControl.LoadDefaultTableView(); + {% endhighlight %} {% highlight c# tabtitle="Task.cs" %} @@ -447,7 +453,6 @@ public class ViewModel ResidentialConstructionResources = GetResources(); // Adding Tasks - taskDetails.Add(new Task() { ID = 1, Name = "Residential Construction (2500 sq.ft)", StartDate = new DateTime(2012, 3, 1), EndDate = new DateTime(2012, 3, 15), BaselineStart = new DateTime(2012, 3, 1), BaselineEnd = new DateTime(2012, 3, 14), Progress = 0d, Cost = 500, BaselineCost = 833d, }); taskDetails[0].ChildCollection.Add(new Task() { ID = 2, Name = "General Considerations", StartDate = new DateTime(2012, 7, 3), EndDate = new DateTime(2012, 7, 14), BaselineStart = new DateTime(2012, 7, 3), BaselineEnd = new DateTime(2012, 7, 14), Progress = 0d, Cost = 89, BaselineCost = 833d, }); @@ -501,7 +506,6 @@ public class ViewModel taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection.Add(new Task() { ID = 40, Name = "Install Wall Insulation", StartDate = new DateTime(2012, 6, 19), EndDate = new DateTime(2012, 6, 21), BaselineStart = new DateTime(2012, 6, 19), BaselineEnd = new DateTime(2012, 6, 21), Progress = 0d, Cost = 53, BaselineCost = 83d, }); taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection.Add(new Task() { ID = 41, Name = "Install Ceiling Insulation", StartDate = new DateTime(2012, 6, 21), EndDate = new DateTime(2012, 6, 22), BaselineStart = new DateTime(2012, 6, 21), BaselineEnd = new DateTime(2012, 6, 22), Progress = 0d, Cost = 89, BaselineCost = 83d, }); - taskDetails[0].ChildCollection[6].ChildCollection.Add(new Task() { ID = 42, Name = "Painting and Wallpaper", StartDate = new DateTime(2012, 6, 22), EndDate = new DateTime(2012, 6, 23), BaselineStart = new DateTime(2012, 6, 22), BaselineEnd = new DateTime(2012, 6, 23), Progress = 0d, Cost = 453, BaselineCost = 563, }); taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection.Add(new Task() { ID = 43, Name = "Painting all Interior", StartDate = new DateTime(2012, 6, 22), EndDate = new DateTime(2012, 6, 23), BaselineStart = new DateTime(2012, 6, 22), BaselineEnd = new DateTime(2012, 6, 23), Progress = 0d, Cost = 453, BaselineCost = 563, }); taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection.Add(new Task() { ID = 44, Name = "Painting all Exterior", StartDate = new DateTime(2012, 6, 23), EndDate = new DateTime(2012, 6, 25), BaselineStart = new DateTime(2012, 6, 23), BaselineEnd = new DateTime(2012, 6, 25), Progress = 0d, Cost = 352, BaselineCost = 342, }); @@ -527,7 +531,6 @@ public class ViewModel taskDetails[0].ChildCollection[7].ChildCollection.Add(new Task() { ID = 60, Name = "Final Inspection", StartDate = new DateTime(2012, 7, 16), EndDate = new DateTime(2012, 7, 17), BaselineStart = new DateTime(2012, 7, 16), BaselineEnd = new DateTime(2012, 7, 17), Progress = 0d, Cost = 0, BaselineCost = 5, }); taskDetails[0].ChildCollection[7].ChildCollection.Add(new Task() { ID = 61, Name = "Move In", StartDate = new DateTime(2012, 7, 17), EndDate = new DateTime(2012, 7, 17), BaselineStart = new DateTime(2012, 7, 18), BaselineEnd = new DateTime(2012, 7, 18), Progress = 0d, Cost = 0, BaselineCost = 0, }); - //Adding Resources taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection[0].Resource.Add(ResidentialConstructionResources[1]); taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection[0].Resource.Add(ResidentialConstructionResources[0]); @@ -678,15 +681,6 @@ public class ViewModel } {% endhighlight %} -{% highlight c# %} - -// To load the Variance Table View -this.ganttControl.LoadVarianceTableView(); - -// To load the Default [Editing] View -this.ganttControl.LoadDefaultTableView(); - -{% endhighlight %} {% endtabs %} The following image shows the BaseLine Table View: @@ -861,104 +855,672 @@ taskAttributeMapping.BaselineStartMapping = "BaselineStart"; this.ganttControl.TaskAttributeMapping = taskAttributeMapping; {% endhighlight %} -{% endtabs %} - -## Samples Link - -To view samples: -1. Go to the Syncfusion Essential Studio installed location. - Location: Installed Location\Syncfusion\Essential Studio\{{ site.releaseversion }}\Infrastructure\Launcher\Syncfusion Control Panel -2. Open the Syncfusion Control Panel in the above location (or) Double click on the Syncfusion Control Panel desktop shortcut menu. -3. Click Run Samples for WPF under User Interface Edition panel. -4. Select Gantt. -5. Expand the Baseline Support item in the Sample Browser. -6. Choose the Baseline Table View sample to launch. +{% highlight c# tabtitle="Task.cs" %} -## Project Statistics +public class Task : INotifyPropertyChanged +{ + /// + /// Holds the start date and end date value. + /// + private DateTime startDate, endDate; + /// + /// Holds the duration value. + /// + private TimeSpan duration; -Project statistics will provide the current statistics of the project in an object form. It will have all the basic information about the project and will provide the variance between the initial plan and current progress. + /// + /// Holds the progress value. + /// + private double progress; -This will provide enough information about the project. The entire project information will be available in the form of an object of type “ProjectInfo”. You can set your own visual to display the statistics. + /// + /// Holds the id value. + /// + private int id; -#### Use Case Scenario + /// + /// Holds the name value. + /// + private string name; -This will be useful for Project Leads to take decisions based on the current status. An Organization can use this to present the current statuses of their projects to their clients. They can also use this for analysis before making important decisions on projects. + /// + /// Holds the cost value. + /// + private Double cost; -#### Methods + /// + /// Holds the baselineStart value. + /// + private DateTime baselineStart; - - - - - -
-Method -Description -Parameters -Type -Return Type
-GetProjectStatistics -this method is used to get the current statistics information about the project -GetProjectStatistics() -N/A -ProjectInfo
+ /// + /// Holds the baselineEnd value. + /// + private DateTime baselineEnd; + /// + /// Holds the baselineCost value. + /// + private Double baselineCost; -#### Adding Project Statistics to an Application + /// + /// Holds the collection value. + /// + private ObservableCollection childCollection; -To add Project Statistics to an application: + /// + /// Holds the resource value. + /// + private ObservableCollection resource; -1. Initialize new instance of ‘ProjectInfo’ class. -2. Assign the GetProjectStatistics() Methods’ return value to that instance. -3. Use the instance for further process. + /// + /// Holds the predecessor value. + /// + private ObservableCollection predecessor; -The following codes illustrate adding Project Statistics to an application: + public Task() + { + this.ChildCollection = new ObservableCollection(); + this.Predecessor = new ObservableCollection(); + this.Resource = new ObservableCollection(); + } -{% tabs %} -{% highlight xaml %} + /// + /// Gets or sets the start date. + /// + public DateTime StartDate + { + get + { + return this.startDate; + } + set + { + this.startDate = value; + OnPropertyChanged("StartDate"); + } + } - - - - - - - + /// + /// Gets or sets the finish date. + /// + public DateTime EndDate + { + get + { + return this.endDate; + } + set + { + this.endDate = value; + OnPropertyChanged("EndDate"); + } + } -{% endhighlight %} -{% highlight c# %} + /// + /// Gets or sets the duration value. + /// + public TimeSpan Duration + { + get + { + return this.duration; + } + set + { + this.duration = value; + OnPropertyChanged("Duration"); + } + } -this.ganttControl.ItemsSource = new ViewModel().TaskDetails; + /// + /// Gets or sets the id value. + /// + public int ID + { + get + { + return this.id; + } + set + { + this.id = value; + OnPropertyChanged("ID"); + } + } -// To get the Project Statistics -ProjectInfo projInfo = this.ganttControl.GetProjectStatistics(); + /// + /// Gets or sets the Name. + /// + public string Name + { + get + { + return this.name; + } + set + { + this.name = value; + OnPropertyChanged("Name"); + } + } - (or) + /// + /// Gets or sets the progress value. + /// + public double Progress + { + get + { + return this.progress; + } + set + { + this.progress = value; + OnPropertyChanged("Progress"); + } + } -ProjectInfo projInfo = new ProjectInfo(); -projInfo = this.ganttControl.GetProjectStatistics(); + /// + /// Gets or sets the cost. + /// + public Double Cost + { + get + { + return this.cost; + } + set + { + this.cost = value; + OnPropertyChanged("Cost"); + } + } -// Task attribute mapping -TaskAttributeMapping taskAttributeMapping = new TaskAttributeMapping(); -taskAttributeMapping.TaskIdMapping = "ID"; -taskAttributeMapping.TaskNameMapping = "Name"; + /// + /// Gets or sets the baseline start. + /// + public DateTime BaselineStart + { + get + { + return this.baselineStart; + } + set + { + this.baselineStart = value; + OnPropertyChanged("BaselineStart"); + } + } + + /// + /// Gets or sets the baseline end. + /// + public DateTime BaselineEnd + { + get + { + return this.baselineEnd; + } + set + { + this.baselineEnd = value; + OnPropertyChanged("BaselineEnd"); + } + } + + /// + /// Gets or sets the baseline cost. + /// + public Double BaselineCost + { + get + { + return this.baselineCost; + } + set + { + this.baselineCost = value; + OnPropertyChanged("BaselineCost"); + } + } + + /// + /// Gets or sets the child collection. + /// + public ObservableCollection ChildCollection + { + get + { + return this.childCollection; + } + set + { + this.childCollection = value; + OnPropertyChanged("ChildCollection"); + } + } + + /// + /// Gets or sets the resource value. + /// + public ObservableCollection Resource + { + get + { + return this.resource; + } + set + { + this.resource = value; + OnPropertyChanged("Resource"); + } + } + + /// + /// Gets or sets the predecessor value. + /// + public ObservableCollection Predecessor + { + get + { + return this.predecessor; + } + set + { + this.predecessor = value; + OnPropertyChanged("Predecessor"); + } + } + + /// + /// Method for property changed. + /// + private void OnPropertyChanged(string propName) + { + if (this.PropertyChanged != null) + { + PropertyChanged(this, new PropertyChangedEventArgs(propName)); + } + } + + public event PropertyChangedEventHandler PropertyChanged; +} + +{% endhighlight %} + +{% highlight c# tabtitle="ViewModel.cs" %} + +public class ViewModel +{ + public ViewModel() + { + this.taskDetails = this.GetTaskDetails(); + } + + /// + /// Holds the task details value. + /// + private ObservableCollection taskDetails; + + /// + /// Gets or sets the task collection. + /// + /// The task collection. + public ObservableCollection TaskDetails + { + get + { + return taskDetails; + } + set + { + this.taskDetails = value; + } + } + + /// + /// Gets the task details. + /// + /// + ObservableCollection GetTaskDetails() + { + var taskDetails = new ObservableCollection(); + + // Collection to Strore the Required Resources. + ObservableCollection ResidentialConstructionResources = new ObservableCollection(); + ResidentialConstructionResources = GetResources(); + + // Adding Tasks + + taskDetails.Add(new Task() { ID = 1, Name = "Residential Construction (2500 sq.ft)", StartDate = new DateTime(2012, 3, 1), EndDate = new DateTime(2012, 3, 15), BaselineStart = new DateTime(2012, 3, 1), BaselineEnd = new DateTime(2012, 3, 14), Progress = 0d, Cost = 500, BaselineCost = 833d, }); + + taskDetails[0].ChildCollection.Add(new Task() { ID = 2, Name = "General Considerations", StartDate = new DateTime(2012, 7, 3), EndDate = new DateTime(2012, 7, 14), BaselineStart = new DateTime(2012, 7, 3), BaselineEnd = new DateTime(2012, 7, 14), Progress = 0d, Cost = 89, BaselineCost = 833d, }); + + taskDetails[0].ChildCollection[0].ChildCollection.Add(new Task() { ID = 3, Name = "Finalize and Approve Plans", StartDate = new DateTime(2012, 3, 1), EndDate = new DateTime(2012, 3, 15), BaselineStart = new DateTime(2012, 3, 2), BaselineEnd = new DateTime(2012, 3, 16), Progress = 0d, Cost = 500, BaselineCost = 833d, }); + taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection.Add(new Task() { ID = 4, Name = "Review and Finalize Site Plans", StartDate = new DateTime(2012, 3, 1), EndDate = new DateTime(2012, 3, 20), BaselineStart = new DateTime(2012, 3, 1), BaselineEnd = new DateTime(2012, 3, 20), Progress = 0d, Cost = 500, BaselineCost = 833d, }); + taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection.Add(new Task() { ID = 5, Name = "Sign contract and Proceed", StartDate = new DateTime(2012, 3, 20), EndDate = new DateTime(2012, 3, 22), BaselineStart = new DateTime(2012, 3, 19), BaselineEnd = new DateTime(2012, 3, 21), Progress = 0d, Cost = 500, BaselineCost = 833d, }); + + taskDetails[0].ChildCollection[0].ChildCollection.Add(new Task() { ID = 6, Name = "Contracts and Agreements", StartDate = new DateTime(2012, 3, 22), EndDate = new DateTime(2012, 3, 22), BaselineStart = new DateTime(2012, 3, 20), BaselineEnd = new DateTime(2012, 3, 21), Progress = 0d, Cost = 20d, BaselineCost = 14 }); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection.Add((new Task() { ID = 7, Name = "Lot Sale Agreement", StartDate = new DateTime(2012, 3, 22), EndDate = new DateTime(2012, 3, 22), BaselineStart = new DateTime(2012, 3, 20), BaselineEnd = new DateTime(2012, 3, 20), Progress = 0d, Cost = 20d, BaselineCost = 14 })); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection.Add((new Task() { ID = 8, Name = "Construction Agreement", StartDate = new DateTime(2012, 3, 22), EndDate = new DateTime(2012, 3, 22), BaselineStart = new DateTime(2012, 3, 21), BaselineEnd = new DateTime(2012, 3, 21), Progress = 0d, Cost = 33d, BaselineCost = 12 })); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection.Add((new Task() { ID = 9, Name = "Contract Specifications", StartDate = new DateTime(2012, 3, 22), EndDate = new DateTime(2012, 3, 22), BaselineStart = new DateTime(2012, 3, 20), BaselineEnd = new DateTime(2012, 3, 20), Progress = 0d, Cost = 30d, BaselineCost = 50 })); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection.Add((new Task() { ID = 10, Name = "Contract Site Plan", StartDate = new DateTime(2012, 3, 22), EndDate = new DateTime(2012, 3, 22), BaselineStart = new DateTime(2012, 3, 20), BaselineEnd = new DateTime(2012, 3, 20), Progress = 0d, Cost = 360d, BaselineCost = 100 })); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection.Add((new Task() { ID = 11, Name = "Financing", StartDate = new DateTime(2012, 3, 22), EndDate = new DateTime(2012, 3, 22), BaselineStart = new DateTime(2012, 3, 20), BaselineEnd = new DateTime(2012, 3, 20), Progress = 0d, Cost = 39d, BaselineCost = 16 })); + + taskDetails[0].ChildCollection[0].ChildCollection.Add(new Task() { ID = 12, Name = "Apply Permits", StartDate = new DateTime(2012, 3, 23), EndDate = new DateTime(2012, 3, 24), BaselineStart = new DateTime(2012, 3, 22), BaselineEnd = new DateTime(2012, 3, 23), Progress = 0d, Cost = 53d, BaselineCost = 65 }); + taskDetails[0].ChildCollection[0].ChildCollection[2].ChildCollection.Add((new Task() { ID = 13, Name = "Foundation Permit", StartDate = new DateTime(2012, 3, 23), EndDate = new DateTime(2012, 3, 24), BaselineStart = new DateTime(2012, 3, 22), BaselineEnd = new DateTime(2012, 3, 23), Progress = 0d, Cost = 53d, BaselineCost = 65 })); + taskDetails[0].ChildCollection[0].ChildCollection[2].ChildCollection.Add((new Task() { ID = 14, Name = "Electrical Permit", StartDate = new DateTime(2012, 3, 24), EndDate = new DateTime(2012, 3, 25), BaselineStart = new DateTime(2012, 3, 24), BaselineEnd = new DateTime(2012, 3, 25), Progress = 0d, Cost = 23d, BaselineCost = 34 })); + taskDetails[0].ChildCollection[0].ChildCollection[2].ChildCollection.Add((new Task() { ID = 15, Name = "Plumbing Permit", StartDate = new DateTime(2012, 3, 25), EndDate = new DateTime(2012, 3, 26), BaselineStart = new DateTime(2012, 3, 25), BaselineEnd = new DateTime(2012, 3, 26), Progress = 0d, Cost = 63d, BaselineCost = 53 })); + + taskDetails[0].ChildCollection.Add(new Task() { ID = 16, Name = "Site Work", StartDate = new DateTime(2012, 3, 26), EndDate = new DateTime(2012, 3, 27), BaselineStart = new DateTime(2012, 3, 26), BaselineEnd = new DateTime(2012, 3, 27), Progress = 0d, Cost = 2000d, BaselineCost = 1000 }); + taskDetails[0].ChildCollection[1].ChildCollection.Add(new Task() { ID = 17, Name = "Clear Lot", StartDate = new DateTime(2012, 3, 26), EndDate = new DateTime(2012, 3, 27), BaselineStart = new DateTime(2012, 3, 27), BaselineEnd = new DateTime(2012, 3, 28), Progress = 0d, Cost = 2000d, BaselineCost = 1000 }); + taskDetails[0].ChildCollection[1].ChildCollection.Add(new Task() { ID = 18, Name = "Strip Topsoil", StartDate = new DateTime(2012, 3, 27), EndDate = new DateTime(2012, 3, 28), BaselineStart = new DateTime(2012, 3, 27), BaselineEnd = new DateTime(2012, 3, 28), Progress = 0d, Cost = 1200d, BaselineCost = 800 }); + taskDetails[0].ChildCollection[1].ChildCollection.Add(new Task() { ID = 19, Name = "Installing Temporary requirements", StartDate = new DateTime(2012, 3, 28), EndDate = new DateTime(2012, 3, 29), BaselineStart = new DateTime(2012, 3, 30), BaselineEnd = new DateTime(2012, 4, 2), Progress = 0d, Cost = 354d, BaselineCost = 230 }); + + taskDetails[0].ChildCollection.Add(new Task() { ID = 20, Name = "Foundation", StartDate = new DateTime(2012, 3, 29), EndDate = new DateTime(2012, 4, 2), BaselineStart = new DateTime(2012, 3, 29), BaselineEnd = new DateTime(2012, 4, 2), Progress = 0d, Cost = 899, BaselineCost = 833d, }); + taskDetails[0].ChildCollection[2].ChildCollection.Add(new Task() { ID = 21, Name = "Excavate for foundation", StartDate = new DateTime(2012, 3, 29), EndDate = new DateTime(2012, 4, 2), BaselineStart = new DateTime(2012, 3, 29), BaselineEnd = new DateTime(2012, 4, 2), Progress = 0d, Cost = 899, BaselineCost = 833d, }); + taskDetails[0].ChildCollection[2].ChildCollection.Add(new Task() { ID = 22, Name = "Building Basement Walls", StartDate = new DateTime(2012, 4, 3), EndDate = new DateTime(2012, 4, 8), BaselineStart = new DateTime(2012, 4, 3), BaselineEnd = new DateTime(2012, 4, 8), Progress = 0d, Cost = 889, BaselineCost = 803d, }); + taskDetails[0].ChildCollection[2].ChildCollection.Add(new Task() { ID = 23, Name = "Foundation inspection", StartDate = new DateTime(2012, 4, 8), EndDate = new DateTime(2012, 4, 10), BaselineStart = new DateTime(2012, 4, 7), BaselineEnd = new DateTime(2012, 4, 9), Progress = 0d, Cost = 8, BaselineCost = 8d, }); + taskDetails[0].ChildCollection[2].ChildCollection.Add(new Task() { ID = 24, Name = "Finishing Foundation", StartDate = new DateTime(2012, 4, 10), EndDate = new DateTime(2012, 4, 17), BaselineStart = new DateTime(2012, 4, 10), BaselineEnd = new DateTime(2012, 4, 17), Progress = 0d, Cost = 0, BaselineCost = 8d, }); + + taskDetails[0].ChildCollection.Add(new Task() { ID = 25, Name = "Framing", StartDate = new DateTime(2012, 4, 18), EndDate = new DateTime(2012, 4, 24), BaselineStart = new DateTime(2012, 4, 18), BaselineEnd = new DateTime(2012, 4, 24), Progress = 0d, Cost = 890, BaselineCost = 803d, }); + taskDetails[0].ChildCollection[3].ChildCollection.Add(new Task() { ID = 26, Name = "First Floor Framing", StartDate = new DateTime(2012, 4, 18), EndDate = new DateTime(2012, 4, 24), BaselineStart = new DateTime(2012, 4, 17), BaselineEnd = new DateTime(2012, 4, 23), Progress = 0d, Cost = 890, BaselineCost = 803d, }); + taskDetails[0].ChildCollection[3].ChildCollection.Add(new Task() { ID = 27, Name = "Second Floor Framing", StartDate = new DateTime(2012, 4, 24), EndDate = new DateTime(2012, 5, 3), BaselineStart = new DateTime(2012, 4, 24), BaselineEnd = new DateTime(2012, 5, 3), Progress = 0d, Cost = 789, BaselineCost = 898d, }); + taskDetails[0].ChildCollection[3].ChildCollection.Add(new Task() { ID = 28, Name = "Framing Roof", StartDate = new DateTime(2012, 5, 3), EndDate = new DateTime(2012, 5, 7), BaselineStart = new DateTime(2012, 5, 4), BaselineEnd = new DateTime(2012, 5, 8), Progress = 0d, Cost = 780, BaselineCost = 833d, }); + taskDetails[0].ChildCollection[3].ChildCollection.Add(new Task() { ID = 29, Name = "Framing Inspection", StartDate = new DateTime(2012, 5, 7), EndDate = new DateTime(2012, 5, 8), BaselineStart = new DateTime(2012, 5, 7), BaselineEnd = new DateTime(2012, 5, 8), Progress = 0d, Cost = 5, BaselineCost = 8d, }); + + taskDetails[0].ChildCollection.Add(new Task() { ID = 30, Name = "Dry In", StartDate = new DateTime(2012, 5, 8), EndDate = new DateTime(2012, 5, 14), BaselineStart = new DateTime(2012, 5, 8), BaselineEnd = new DateTime(2012, 5, 15), Progress = 0d, Cost = 232, BaselineCost = 323d, }); + taskDetails[0].ChildCollection[4].ChildCollection.Add(new Task() { ID = 31, Name = "Installing Sheathing for floors", StartDate = new DateTime(2012, 5, 8), EndDate = new DateTime(2012, 5, 14), BaselineStart = new DateTime(2012, 5, 9), BaselineEnd = new DateTime(2012, 5, 15), Progress = 0d, Cost = 232, BaselineCost = 323d, }); + taskDetails[0].ChildCollection[4].ChildCollection.Add(new Task() { ID = 32, Name = "Installing Windows", StartDate = new DateTime(2012, 5, 14), EndDate = new DateTime(2012, 5, 25), BaselineStart = new DateTime(2012, 5, 14), BaselineEnd = new DateTime(2012, 5, 25), Progress = 0d, Cost = 325, BaselineCost = 452d, }); + taskDetails[0].ChildCollection[4].ChildCollection.Add(new Task() { ID = 33, Name = "Installing Sheathing for Roof", StartDate = new DateTime(2012, 5, 25), EndDate = new DateTime(2012, 5, 30), BaselineStart = new DateTime(2012, 5, 23), BaselineEnd = new DateTime(2012, 5, 30), Progress = 0d, Cost = 82, BaselineCost = 83d, }); + + taskDetails[0].ChildCollection.Add(new Task() { ID = 34, Name = "Exterior Finishing", StartDate = new DateTime(2012, 5, 31), EndDate = new DateTime(2012, 6, 12), BaselineStart = new DateTime(2012, 5, 31), BaselineEnd = new DateTime(2012, 6, 12), Progress = 0d, Cost = 463, BaselineCost = 633d, }); + taskDetails[0].ChildCollection[5].ChildCollection.Add(new Task() { ID = 35, Name = "Exterior Trimming", StartDate = new DateTime(2012, 5, 31), EndDate = new DateTime(2012, 6, 12), BaselineStart = new DateTime(2012, 5, 31), BaselineEnd = new DateTime(2012, 6, 12), Progress = 0d, Cost = 463, BaselineCost = 633d, }); + taskDetails[0].ChildCollection[5].ChildCollection.Add(new Task() { ID = 36, Name = "Completing Exterior Bricks", StartDate = new DateTime(2012, 6, 12), EndDate = new DateTime(2012, 6, 17), BaselineStart = new DateTime(2012, 6, 12), BaselineEnd = new DateTime(2012, 6, 17), Progress = 0d, Cost = 234, BaselineCost = 333d, }); + + taskDetails[0].ChildCollection.Add(new Task() { ID = 37, Name = "Interior Finishing", StartDate = new DateTime(2012, 6, 17), EndDate = new DateTime(2012, 6, 19), BaselineStart = new DateTime(2012, 6, 17), BaselineEnd = new DateTime(2012, 6, 19), Progress = 0d, Cost = 43, BaselineCost = 33d, }); + + taskDetails[0].ChildCollection[6].ChildCollection.Add(new Task() { ID = 38, Name = "Installing Insulation", StartDate = new DateTime(2012, 6, 17), EndDate = new DateTime(2012, 6, 19), BaselineStart = new DateTime(2012, 6, 17), BaselineEnd = new DateTime(2012, 6, 19), Progress = 0d, Cost = 43, BaselineCost = 33d, }); + taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection.Add(new Task() { ID = 39, Name = "Install Floor Insulation", StartDate = new DateTime(2012, 6, 17), EndDate = new DateTime(2012, 6, 19), BaselineStart = new DateTime(2012, 6, 17), BaselineEnd = new DateTime(2012, 6, 19), Progress = 0d, Cost = 43, BaselineCost = 33d, }); + taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection.Add(new Task() { ID = 40, Name = "Install Wall Insulation", StartDate = new DateTime(2012, 6, 19), EndDate = new DateTime(2012, 6, 21), BaselineStart = new DateTime(2012, 6, 19), BaselineEnd = new DateTime(2012, 6, 21), Progress = 0d, Cost = 53, BaselineCost = 83d, }); + taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection.Add(new Task() { ID = 41, Name = "Install Ceiling Insulation", StartDate = new DateTime(2012, 6, 21), EndDate = new DateTime(2012, 6, 22), BaselineStart = new DateTime(2012, 6, 21), BaselineEnd = new DateTime(2012, 6, 22), Progress = 0d, Cost = 89, BaselineCost = 83d, }); + + taskDetails[0].ChildCollection[6].ChildCollection.Add(new Task() { ID = 42, Name = "Painting and Wallpaper", StartDate = new DateTime(2012, 6, 22), EndDate = new DateTime(2012, 6, 23), BaselineStart = new DateTime(2012, 6, 22), BaselineEnd = new DateTime(2012, 6, 23), Progress = 0d, Cost = 453, BaselineCost = 563, }); + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection.Add(new Task() { ID = 43, Name = "Painting all Interior", StartDate = new DateTime(2012, 6, 22), EndDate = new DateTime(2012, 6, 23), BaselineStart = new DateTime(2012, 6, 22), BaselineEnd = new DateTime(2012, 6, 23), Progress = 0d, Cost = 453, BaselineCost = 563, }); + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection.Add(new Task() { ID = 44, Name = "Painting all Exterior", StartDate = new DateTime(2012, 6, 23), EndDate = new DateTime(2012, 6, 25), BaselineStart = new DateTime(2012, 6, 23), BaselineEnd = new DateTime(2012, 6, 25), Progress = 0d, Cost = 352, BaselineCost = 342, }); + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection.Add(new Task() { ID = 45, Name = "Additional Trimming Work", StartDate = new DateTime(2012, 6, 25), EndDate = new DateTime(2012, 6, 27), BaselineStart = new DateTime(2012, 6, 25), BaselineEnd = new DateTime(2012, 6, 27), Progress = 0d, Cost = 32, BaselineCost = 50, }); + + taskDetails[0].ChildCollection[6].ChildCollection.Add(new Task() { ID = 46, Name = "Finishing Plumbing", StartDate = new DateTime(2012, 6, 27), EndDate = new DateTime(2012, 6, 29), BaselineStart = new DateTime(2012, 6, 27), BaselineEnd = new DateTime(2012, 6, 29), Progress = 0d, Cost = 424, BaselineCost = 423, }); + taskDetails[0].ChildCollection[6].ChildCollection[2].ChildCollection.Add(new Task() { ID = 47, Name = "First floor Plumbing", StartDate = new DateTime(2012, 6, 27), EndDate = new DateTime(2012, 6, 29), BaselineStart = new DateTime(2012, 6, 27), BaselineEnd = new DateTime(2012, 6, 29), Progress = 0d, Cost = 424, BaselineCost = 423, }); + taskDetails[0].ChildCollection[6].ChildCollection[2].ChildCollection.Add(new Task() { ID = 48, Name = "Second floor plumbing", StartDate = new DateTime(2012, 6, 29), EndDate = new DateTime(2012, 7, 1), BaselineStart = new DateTime(2012, 6, 29), BaselineEnd = new DateTime(2012, 7, 1), Progress = 0d, Cost = 234, BaselineCost = 324, }); + taskDetails[0].ChildCollection[6].ChildCollection[2].ChildCollection.Add(new Task() { ID = 49, Name = "Inspecting Plumbing", StartDate = new DateTime(2012, 7, 1), EndDate = new DateTime(2012, 7, 3), BaselineStart = new DateTime(2012, 7, 1), BaselineEnd = new DateTime(2012, 7, 3), Progress = 0d, Cost = 23, BaselineCost = 33d, }); + + taskDetails[0].ChildCollection[6].ChildCollection.Add(new Task() { ID = 50, Name = "Finishing Electrical", StartDate = new DateTime(2012, 7, 3), EndDate = new DateTime(2012, 7, 5), BaselineStart = new DateTime(2012, 7, 3), BaselineEnd = new DateTime(2012, 7, 5), Progress = 0d, Cost = 432, BaselineCost = 536, }); + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection.Add(new Task() { ID = 51, Name = "Progress first floor connections", StartDate = new DateTime(2012, 7, 3), EndDate = new DateTime(2012, 7, 5), BaselineStart = new DateTime(2012, 7, 3), BaselineEnd = new DateTime(2012, 7, 5), Progress = 0d, Cost = 432, BaselineCost = 536, }); + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection.Add(new Task() { ID = 52, Name = "Progress second floor connections", StartDate = new DateTime(2012, 7, 5), EndDate = new DateTime(2012, 7, 7), BaselineStart = new DateTime(2012, 7, 4), BaselineEnd = new DateTime(2012, 7, 6), Progress = 0d, Cost = 563, BaselineCost = 463, }); + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection.Add(new Task() { ID = 53, Name = "Progress non-Electrical Wiring", StartDate = new DateTime(2012, 7, 7), EndDate = new DateTime(2012, 7, 8), BaselineStart = new DateTime(2012, 7, 7), BaselineEnd = new DateTime(2012, 7, 8), Progress = 0d, Cost = 234, BaselineCost = 563, }); + + taskDetails[0].ChildCollection[6].ChildCollection.Add(new Task() { ID = 54, Name = "Carpet,Tiles and Furnishing", StartDate = new DateTime(2012, 7, 8), EndDate = new DateTime(2012, 7, 10), BaselineStart = new DateTime(2012, 7, 9), BaselineEnd = new DateTime(2012, 7, 11), Progress = 0d, Cost = 253, BaselineCost = 210, }); + taskDetails[0].ChildCollection[6].ChildCollection[4].ChildCollection.Add(new Task() { ID = 55, Name = "Progress first floor carpet", StartDate = new DateTime(2012, 7, 8), EndDate = new DateTime(2012, 7, 10), BaselineStart = new DateTime(2012, 7, 8), BaselineEnd = new DateTime(2012, 7, 10), Progress = 0d, Cost = 253, BaselineCost = 210, }); + taskDetails[0].ChildCollection[6].ChildCollection[4].ChildCollection.Add(new Task() { ID = 56, Name = "Progress second floor carpet", StartDate = new DateTime(2012, 7, 10), EndDate = new DateTime(2012, 7, 13), BaselineStart = new DateTime(2012, 7, 10), BaselineEnd = new DateTime(2012, 7, 13), Progress = 0d, Cost = 341, BaselineCost = 300, }); + taskDetails[0].ChildCollection[6].ChildCollection[4].ChildCollection.Add(new Task() { ID = 57, Name = "Progress Furnishing Kitchen, bath, hall", StartDate = new DateTime(2012, 7, 13), EndDate = new DateTime(2012, 7, 14), BaselineStart = new DateTime(2012, 7, 13), BaselineEnd = new DateTime(2012, 7, 14), Progress = 0, Cost = 4252, BaselineCost = 6033d, }); + + taskDetails[0].ChildCollection.Add(new Task() { ID = 58, Name = "Final Acceptance", StartDate = new DateTime(2012, 7, 14), EndDate = new DateTime(2012, 7, 16), BaselineStart = new DateTime(2012, 7, 14), BaselineEnd = new DateTime(2012, 7, 16), Progress = 0d, Cost = 430, BaselineCost = 433d, }); + taskDetails[0].ChildCollection[7].ChildCollection.Add(new Task() { ID = 59, Name = "Cleaning", StartDate = new DateTime(2012, 7, 14), EndDate = new DateTime(2012, 7, 16), BaselineStart = new DateTime(2012, 7, 14), BaselineEnd = new DateTime(2012, 7, 16), Progress = 0d, Cost = 430, BaselineCost = 433d, }); + taskDetails[0].ChildCollection[7].ChildCollection.Add(new Task() { ID = 60, Name = "Final Inspection", StartDate = new DateTime(2012, 7, 16), EndDate = new DateTime(2012, 7, 17), BaselineStart = new DateTime(2012, 7, 16), BaselineEnd = new DateTime(2012, 7, 17), Progress = 0d, Cost = 0, BaselineCost = 5, }); + taskDetails[0].ChildCollection[7].ChildCollection.Add(new Task() { ID = 61, Name = "Move In", StartDate = new DateTime(2012, 7, 17), EndDate = new DateTime(2012, 7, 17), BaselineStart = new DateTime(2012, 7, 18), BaselineEnd = new DateTime(2012, 7, 18), Progress = 0d, Cost = 0, BaselineCost = 0, }); + + //Adding Resources + taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection[0].Resource.Add(ResidentialConstructionResources[1]); + taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection[0].Resource.Add(ResidentialConstructionResources[0]); + taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection[0].Resource.Add(ResidentialConstructionResources[2]); + + taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection[1].Resource.Add(ResidentialConstructionResources[0]); + taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection[1].Resource.Add(ResidentialConstructionResources[1]); + taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection[1].Resource.Add(ResidentialConstructionResources[2]); + + taskDetails[0].ChildCollection[1].ChildCollection[0].Resource.Add(ResidentialConstructionResources[3]); + taskDetails[0].ChildCollection[1].ChildCollection[1].Resource.Add(ResidentialConstructionResources[3]); + taskDetails[0].ChildCollection[1].ChildCollection[2].Resource.Add(ResidentialConstructionResources[5]); + taskDetails[0].ChildCollection[1].ChildCollection[2].Resource.Add(ResidentialConstructionResources[6]); + taskDetails[0].ChildCollection[1].ChildCollection[2].Resource.Add(ResidentialConstructionResources[4]); + + taskDetails[0].ChildCollection[2].ChildCollection[0].Resource.Add(ResidentialConstructionResources[3]); + taskDetails[0].ChildCollection[2].ChildCollection[1].Resource.Add(ResidentialConstructionResources[6]); + taskDetails[0].ChildCollection[2].ChildCollection[2].Resource.Add(ResidentialConstructionResources[7]); + taskDetails[0].ChildCollection[2].ChildCollection[3].Resource.Add(ResidentialConstructionResources[3]); + + taskDetails[0].ChildCollection[3].ChildCollection[0].Resource.Add(ResidentialConstructionResources[8]); + taskDetails[0].ChildCollection[3].ChildCollection[1].Resource.Add(ResidentialConstructionResources[8]); + taskDetails[0].ChildCollection[3].ChildCollection[2].Resource.Add(ResidentialConstructionResources[9]); + taskDetails[0].ChildCollection[3].ChildCollection[3].Resource.Add(ResidentialConstructionResources[7]); + + taskDetails[0].ChildCollection[4].ChildCollection[0].Resource.Add(ResidentialConstructionResources[8]); + taskDetails[0].ChildCollection[4].ChildCollection[1].Resource.Add(ResidentialConstructionResources[9]); + taskDetails[0].ChildCollection[4].ChildCollection[2].Resource.Add(ResidentialConstructionResources[8]); + + taskDetails[0].ChildCollection[5].ChildCollection[0].Resource.Add(ResidentialConstructionResources[14]); + taskDetails[0].ChildCollection[5].ChildCollection[1].Resource.Add(ResidentialConstructionResources[8]); + + taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection[0].Resource.Add(ResidentialConstructionResources[10]); + taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection[1].Resource.Add(ResidentialConstructionResources[10]); + taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection[2].Resource.Add(ResidentialConstructionResources[10]); + + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection[0].Resource.Add(ResidentialConstructionResources[12]); + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection[1].Resource.Add(ResidentialConstructionResources[12]); + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection[2].Resource.Add(ResidentialConstructionResources[12]); + + taskDetails[0].ChildCollection[6].ChildCollection[2].ChildCollection[0].Resource.Add(ResidentialConstructionResources[5]); + taskDetails[0].ChildCollection[6].ChildCollection[2].ChildCollection[1].Resource.Add(ResidentialConstructionResources[5]); + taskDetails[0].ChildCollection[6].ChildCollection[2].ChildCollection[2].Resource.Add(ResidentialConstructionResources[7]); + + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection[0].Resource.Add(ResidentialConstructionResources[4]); + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection[1].Resource.Add(ResidentialConstructionResources[4]); + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection[2].Resource.Add(ResidentialConstructionResources[4]); + + taskDetails[0].ChildCollection[6].ChildCollection[4].ChildCollection[0].Resource.Add(ResidentialConstructionResources[13]); + taskDetails[0].ChildCollection[6].ChildCollection[4].ChildCollection[1].Resource.Add(ResidentialConstructionResources[13]); + taskDetails[0].ChildCollection[6].ChildCollection[4].ChildCollection[2].Resource.Add(ResidentialConstructionResources[14]); + + taskDetails[0].ChildCollection[7].ChildCollection[0].Resource.Add(ResidentialConstructionResources[16]); + taskDetails[0].ChildCollection[7].ChildCollection[1].Resource.Add(ResidentialConstructionResources[7]); + taskDetails[0].ChildCollection[7].ChildCollection[2].Resource.Add(ResidentialConstructionResources[1]); + + //Adding Predecessors + taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 4, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 5, GanttTaskRelationship = GanttTaskRelationship.FinishToFinish }); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 5, GanttTaskRelationship = GanttTaskRelationship.FinishToFinish }); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 5, GanttTaskRelationship = GanttTaskRelationship.FinishToFinish }); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection[3].Predecessor.Add(new Predecessor() { GanttTaskIndex = 5, GanttTaskRelationship = GanttTaskRelationship.FinishToFinish }); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection[4].Predecessor.Add(new Predecessor() { GanttTaskIndex = 5, GanttTaskRelationship = GanttTaskRelationship.FinishToFinish }); + + taskDetails[0].ChildCollection[0].ChildCollection[2].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 5, GanttTaskRelationship = GanttTaskRelationship.FinishToFinish }); + taskDetails[0].ChildCollection[0].ChildCollection[2].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 5, GanttTaskRelationship = GanttTaskRelationship.FinishToFinish }); + taskDetails[0].ChildCollection[0].ChildCollection[2].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 5, GanttTaskRelationship = GanttTaskRelationship.FinishToFinish }); + + taskDetails[0].ChildCollection[1].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 13, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[1].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 14, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[1].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 15, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[1].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 17, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[1].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 18, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[2].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 19, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[2].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 21, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[2].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 19, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[2].ChildCollection[3].Predecessor.Add(new Predecessor() { GanttTaskIndex = 23, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[3].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 24, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[3].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 26, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[3].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 27, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[3].ChildCollection[3].Predecessor.Add(new Predecessor() { GanttTaskIndex = 28, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[4].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 29, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[4].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 31, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[4].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 32, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[5].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 33, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[5].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 35, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 36, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 39, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 40, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 41, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 43, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 44, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 43, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[6].ChildCollection[2].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 45, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[2].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 47, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[2].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 48, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 49, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 48, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 51, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 52, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[6].ChildCollection[4].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 53, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[4].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 55, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[4].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 56, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[7].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 57, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[7].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 59, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[7].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 60, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + return taskDetails; + } + + /// + /// Gets the resources. + /// + /// + private static ObservableCollection GetResources() + { + ObservableCollection Resources = new ObservableCollection(); + Resources.Add(new Resource() { ID = 1, Name = "General Contractor" }); + Resources.Add(new Resource() { ID = 2, Name = "Owner" }); + Resources.Add(new Resource() { ID = 3, Name = "Architect" }); + Resources.Add(new Resource() { ID = 4, Name = "Site Excavation Contractor" }); + Resources.Add(new Resource() { ID = 5, Name = "Electrical Contractor" }); + Resources.Add(new Resource() { ID = 6, Name = "Plumbing Contractor" }); + Resources.Add(new Resource() { ID = 7, Name = "Concrete Contractor" }); + Resources.Add(new Resource() { ID = 8, Name = "Inspector" }); + Resources.Add(new Resource() { ID = 9, Name = "Framing Contractor" }); + Resources.Add(new Resource() { ID = 10, Name = "Roofing Contractor" }); + Resources.Add(new Resource() { ID = 11, Name = "Insulation Contractor" }); + Resources.Add(new Resource() { ID = 12, Name = "Drywall contractor" }); + Resources.Add(new Resource() { ID = 13, Name = "Painting Contractor" }); + Resources.Add(new Resource() { ID = 14, Name = "Flooring Contractor" }); + Resources.Add(new Resource() { ID = 15, Name = "Appliance Contractor" }); + Resources.Add(new Resource() { ID = 16, Name = "Masonry Contractor" }); + Resources.Add(new Resource() { ID = 17, Name = "MaID Service" }); + + return Resources; + } +} + +{% endhighlight %} +{% endtabs %} + +## Samples Link + +To view samples: + +1. Go to the Syncfusion Essential Studio installed location. + Location: Installed Location\Syncfusion\Essential Studio\{{ site.releaseversion }}\Infrastructure\Launcher\Syncfusion Control Panel +2. Open the Syncfusion Control Panel in the above location (or) Double click on the Syncfusion Control Panel desktop shortcut menu. +3. Click Run Samples for WPF under User Interface Edition panel. +4. Select Gantt. +5. Expand the Baseline Support item in the Sample Browser. +6. Choose the Baseline Table View sample to launch. + +## Project Statistics + + +Project statistics will provide the current statistics of the project in an object form. It will have all the basic information about the project and will provide the variance between the initial plan and current progress. + +This will provide enough information about the project. The entire project information will be available in the form of an object of type “ProjectInfo”. You can set your own visual to display the statistics. + +#### Use Case Scenario + +This will be useful for Project Leads to take decisions based on the current status. An Organization can use this to present the current statuses of their projects to their clients. They can also use this for analysis before making important decisions on projects. + +#### Methods + + + + + + +
+Method +Description +Parameters +Type +Return Type
+GetProjectStatistics +this method is used to get the current statistics information about the project +GetProjectStatistics() +N/A +ProjectInfo
+ + +#### Adding Project Statistics to an Application + +To add Project Statistics to an application: + +1. Initialize new instance of ‘ProjectInfo’ class. +2. Assign the GetProjectStatistics() Methods’ return value to that instance. +3. Use the instance for further process. + +The following codes illustrate adding Project Statistics to an application: + +{% tabs %} +{% highlight xaml %} + + + + + + + + + +{% endhighlight %} +{% highlight c# %} + +this.ganttControl.ItemsSource = new ViewModel().TaskDetails; + +// To get the Project Statistics +ProjectInfo projInfo = this.ganttControl.GetProjectStatistics(); + + (or) + +ProjectInfo projInfo = new ProjectInfo(); +projInfo = this.ganttControl.GetProjectStatistics(); + +// Task attribute mapping +TaskAttributeMapping taskAttributeMapping = new TaskAttributeMapping(); +taskAttributeMapping.TaskIdMapping = "ID"; +taskAttributeMapping.TaskNameMapping = "Name"; taskAttributeMapping.StartDateMapping = "StartDate"; taskAttributeMapping.ChildMapping = "ChildCollection"; taskAttributeMapping.FinishDateMapping = "EndDate"; @@ -971,7 +1533,575 @@ taskAttributeMapping.BaselineFinishMapping = "BaselineEnd"; taskAttributeMapping.BaselineStartMapping = "BaselineStart"; this.ganttControl.TaskAttributeMapping = taskAttributeMapping; -{% endhighlight %} +{% endhighlight %} + +{% highlight c# tabtitle="Task.cs" %} + +public class Task : INotifyPropertyChanged +{ + /// + /// Holds the start date and end date value. + /// + private DateTime startDate, endDate; + + /// + /// Holds the duration value. + /// + private TimeSpan duration; + + /// + /// Holds the progress value. + /// + private double progress; + + /// + /// Holds the id value. + /// + private int id; + + /// + /// Holds the name value. + /// + private string name; + + /// + /// Holds the cost value. + /// + private Double cost; + + /// + /// Holds the baselineStart value. + /// + private DateTime baselineStart; + + /// + /// Holds the baselineEnd value. + /// + private DateTime baselineEnd; + + /// + /// Holds the baselineCost value. + /// + private Double baselineCost; + + /// + /// Holds the collection value. + /// + private ObservableCollection childCollection; + + /// + /// Holds the resource value. + /// + private ObservableCollection resource; + + /// + /// Holds the predecessor value. + /// + private ObservableCollection predecessor; + + public Task() + { + this.ChildCollection = new ObservableCollection(); + this.Predecessor = new ObservableCollection(); + this.Resource = new ObservableCollection(); + } + + /// + /// Gets or sets the start date. + /// + public DateTime StartDate + { + get + { + return this.startDate; + } + set + { + this.startDate = value; + OnPropertyChanged("StartDate"); + } + } + + /// + /// Gets or sets the finish date. + /// + public DateTime EndDate + { + get + { + return this.endDate; + } + set + { + this.endDate = value; + OnPropertyChanged("EndDate"); + } + } + + /// + /// Gets or sets the duration value. + /// + public TimeSpan Duration + { + get + { + return this.duration; + } + set + { + this.duration = value; + OnPropertyChanged("Duration"); + } + } + + /// + /// Gets or sets the id value. + /// + public int ID + { + get + { + return this.id; + } + set + { + this.id = value; + OnPropertyChanged("ID"); + } + } + + /// + /// Gets or sets the Name. + /// + public string Name + { + get + { + return this.name; + } + set + { + this.name = value; + OnPropertyChanged("Name"); + } + } + + /// + /// Gets or sets the progress value. + /// + public double Progress + { + get + { + return this.progress; + } + set + { + this.progress = value; + OnPropertyChanged("Progress"); + } + } + + /// + /// Gets or sets the cost. + /// + public Double Cost + { + get + { + return this.cost; + } + set + { + this.cost = value; + OnPropertyChanged("Cost"); + } + } + + /// + /// Gets or sets the baseline start. + /// + public DateTime BaselineStart + { + get + { + return this.baselineStart; + } + set + { + this.baselineStart = value; + OnPropertyChanged("BaselineStart"); + } + } + + /// + /// Gets or sets the baseline end. + /// + public DateTime BaselineEnd + { + get + { + return this.baselineEnd; + } + set + { + this.baselineEnd = value; + OnPropertyChanged("BaselineEnd"); + } + } + + /// + /// Gets or sets the baseline cost. + /// + public Double BaselineCost + { + get + { + return this.baselineCost; + } + set + { + this.baselineCost = value; + OnPropertyChanged("BaselineCost"); + } + } + + /// + /// Gets or sets the child collection. + /// + public ObservableCollection ChildCollection + { + get + { + return this.childCollection; + } + set + { + this.childCollection = value; + OnPropertyChanged("ChildCollection"); + } + } + + /// + /// Gets or sets the resource value. + /// + public ObservableCollection Resource + { + get + { + return this.resource; + } + set + { + this.resource = value; + OnPropertyChanged("Resource"); + } + } + + /// + /// Gets or sets the predecessor value. + /// + public ObservableCollection Predecessor + { + get + { + return this.predecessor; + } + set + { + this.predecessor = value; + OnPropertyChanged("Predecessor"); + } + } + + /// + /// Method for property changed. + /// + private void OnPropertyChanged(string propName) + { + if (this.PropertyChanged != null) + { + PropertyChanged(this, new PropertyChangedEventArgs(propName)); + } + } + + public event PropertyChangedEventHandler PropertyChanged; +} + +{% endhighlight %} + +{% highlight c# tabtitle="ViewModel.cs" %} + +public class ViewModel +{ + public ViewModel() + { + this.taskDetails = this.GetTaskDetails(); + } + + /// + /// Holds the task details value. + /// + private ObservableCollection taskDetails; + + /// + /// Gets or sets the task collection. + /// + /// The task collection. + public ObservableCollection TaskDetails + { + get + { + return taskDetails; + } + set + { + this.taskDetails = value; + } + } + + /// + /// Gets the task details. + /// + /// + ObservableCollection GetTaskDetails() + { + var taskDetails = new ObservableCollection(); + + // Collection to Strore the Required Resources. + ObservableCollection ResidentialConstructionResources = new ObservableCollection(); + ResidentialConstructionResources = GetResources(); + + // Adding Tasks + + taskDetails.Add(new Task() { ID = 1, Name = "Residential Construction (2500 sq.ft)", StartDate = new DateTime(2012, 3, 1), EndDate = new DateTime(2012, 3, 15), BaselineStart = new DateTime(2012, 3, 1), BaselineEnd = new DateTime(2012, 3, 14), Progress = 0d, Cost = 500, BaselineCost = 833d, }); + + taskDetails[0].ChildCollection.Add(new Task() { ID = 2, Name = "General Considerations", StartDate = new DateTime(2012, 7, 3), EndDate = new DateTime(2012, 7, 14), BaselineStart = new DateTime(2012, 7, 3), BaselineEnd = new DateTime(2012, 7, 14), Progress = 0d, Cost = 89, BaselineCost = 833d, }); + + taskDetails[0].ChildCollection[0].ChildCollection.Add(new Task() { ID = 3, Name = "Finalize and Approve Plans", StartDate = new DateTime(2012, 3, 1), EndDate = new DateTime(2012, 3, 15), BaselineStart = new DateTime(2012, 3, 2), BaselineEnd = new DateTime(2012, 3, 16), Progress = 0d, Cost = 500, BaselineCost = 833d, }); + taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection.Add(new Task() { ID = 4, Name = "Review and Finalize Site Plans", StartDate = new DateTime(2012, 3, 1), EndDate = new DateTime(2012, 3, 20), BaselineStart = new DateTime(2012, 3, 1), BaselineEnd = new DateTime(2012, 3, 20), Progress = 0d, Cost = 500, BaselineCost = 833d, }); + taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection.Add(new Task() { ID = 5, Name = "Sign contract and Proceed", StartDate = new DateTime(2012, 3, 20), EndDate = new DateTime(2012, 3, 22), BaselineStart = new DateTime(2012, 3, 19), BaselineEnd = new DateTime(2012, 3, 21), Progress = 0d, Cost = 500, BaselineCost = 833d, }); + + taskDetails[0].ChildCollection[0].ChildCollection.Add(new Task() { ID = 6, Name = "Contracts and Agreements", StartDate = new DateTime(2012, 3, 22), EndDate = new DateTime(2012, 3, 22), BaselineStart = new DateTime(2012, 3, 20), BaselineEnd = new DateTime(2012, 3, 21), Progress = 0d, Cost = 20d, BaselineCost = 14 }); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection.Add((new Task() { ID = 7, Name = "Lot Sale Agreement", StartDate = new DateTime(2012, 3, 22), EndDate = new DateTime(2012, 3, 22), BaselineStart = new DateTime(2012, 3, 20), BaselineEnd = new DateTime(2012, 3, 20), Progress = 0d, Cost = 20d, BaselineCost = 14 })); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection.Add((new Task() { ID = 8, Name = "Construction Agreement", StartDate = new DateTime(2012, 3, 22), EndDate = new DateTime(2012, 3, 22), BaselineStart = new DateTime(2012, 3, 21), BaselineEnd = new DateTime(2012, 3, 21), Progress = 0d, Cost = 33d, BaselineCost = 12 })); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection.Add((new Task() { ID = 9, Name = "Contract Specifications", StartDate = new DateTime(2012, 3, 22), EndDate = new DateTime(2012, 3, 22), BaselineStart = new DateTime(2012, 3, 20), BaselineEnd = new DateTime(2012, 3, 20), Progress = 0d, Cost = 30d, BaselineCost = 50 })); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection.Add((new Task() { ID = 10, Name = "Contract Site Plan", StartDate = new DateTime(2012, 3, 22), EndDate = new DateTime(2012, 3, 22), BaselineStart = new DateTime(2012, 3, 20), BaselineEnd = new DateTime(2012, 3, 20), Progress = 0d, Cost = 360d, BaselineCost = 100 })); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection.Add((new Task() { ID = 11, Name = "Financing", StartDate = new DateTime(2012, 3, 22), EndDate = new DateTime(2012, 3, 22), BaselineStart = new DateTime(2012, 3, 20), BaselineEnd = new DateTime(2012, 3, 20), Progress = 0d, Cost = 39d, BaselineCost = 16 })); + + taskDetails[0].ChildCollection[0].ChildCollection.Add(new Task() { ID = 12, Name = "Apply Permits", StartDate = new DateTime(2012, 3, 23), EndDate = new DateTime(2012, 3, 24), BaselineStart = new DateTime(2012, 3, 22), BaselineEnd = new DateTime(2012, 3, 23), Progress = 0d, Cost = 53d, BaselineCost = 65 }); + taskDetails[0].ChildCollection[0].ChildCollection[2].ChildCollection.Add((new Task() { ID = 13, Name = "Foundation Permit", StartDate = new DateTime(2012, 3, 23), EndDate = new DateTime(2012, 3, 24), BaselineStart = new DateTime(2012, 3, 22), BaselineEnd = new DateTime(2012, 3, 23), Progress = 0d, Cost = 53d, BaselineCost = 65 })); + taskDetails[0].ChildCollection[0].ChildCollection[2].ChildCollection.Add((new Task() { ID = 14, Name = "Electrical Permit", StartDate = new DateTime(2012, 3, 24), EndDate = new DateTime(2012, 3, 25), BaselineStart = new DateTime(2012, 3, 24), BaselineEnd = new DateTime(2012, 3, 25), Progress = 0d, Cost = 23d, BaselineCost = 34 })); + taskDetails[0].ChildCollection[0].ChildCollection[2].ChildCollection.Add((new Task() { ID = 15, Name = "Plumbing Permit", StartDate = new DateTime(2012, 3, 25), EndDate = new DateTime(2012, 3, 26), BaselineStart = new DateTime(2012, 3, 25), BaselineEnd = new DateTime(2012, 3, 26), Progress = 0d, Cost = 63d, BaselineCost = 53 })); + + taskDetails[0].ChildCollection.Add(new Task() { ID = 16, Name = "Site Work", StartDate = new DateTime(2012, 3, 26), EndDate = new DateTime(2012, 3, 27), BaselineStart = new DateTime(2012, 3, 26), BaselineEnd = new DateTime(2012, 3, 27), Progress = 0d, Cost = 2000d, BaselineCost = 1000 }); + taskDetails[0].ChildCollection[1].ChildCollection.Add(new Task() { ID = 17, Name = "Clear Lot", StartDate = new DateTime(2012, 3, 26), EndDate = new DateTime(2012, 3, 27), BaselineStart = new DateTime(2012, 3, 27), BaselineEnd = new DateTime(2012, 3, 28), Progress = 0d, Cost = 2000d, BaselineCost = 1000 }); + taskDetails[0].ChildCollection[1].ChildCollection.Add(new Task() { ID = 18, Name = "Strip Topsoil", StartDate = new DateTime(2012, 3, 27), EndDate = new DateTime(2012, 3, 28), BaselineStart = new DateTime(2012, 3, 27), BaselineEnd = new DateTime(2012, 3, 28), Progress = 0d, Cost = 1200d, BaselineCost = 800 }); + taskDetails[0].ChildCollection[1].ChildCollection.Add(new Task() { ID = 19, Name = "Installing Temporary requirements", StartDate = new DateTime(2012, 3, 28), EndDate = new DateTime(2012, 3, 29), BaselineStart = new DateTime(2012, 3, 30), BaselineEnd = new DateTime(2012, 4, 2), Progress = 0d, Cost = 354d, BaselineCost = 230 }); + + taskDetails[0].ChildCollection.Add(new Task() { ID = 20, Name = "Foundation", StartDate = new DateTime(2012, 3, 29), EndDate = new DateTime(2012, 4, 2), BaselineStart = new DateTime(2012, 3, 29), BaselineEnd = new DateTime(2012, 4, 2), Progress = 0d, Cost = 899, BaselineCost = 833d, }); + taskDetails[0].ChildCollection[2].ChildCollection.Add(new Task() { ID = 21, Name = "Excavate for foundation", StartDate = new DateTime(2012, 3, 29), EndDate = new DateTime(2012, 4, 2), BaselineStart = new DateTime(2012, 3, 29), BaselineEnd = new DateTime(2012, 4, 2), Progress = 0d, Cost = 899, BaselineCost = 833d, }); + taskDetails[0].ChildCollection[2].ChildCollection.Add(new Task() { ID = 22, Name = "Building Basement Walls", StartDate = new DateTime(2012, 4, 3), EndDate = new DateTime(2012, 4, 8), BaselineStart = new DateTime(2012, 4, 3), BaselineEnd = new DateTime(2012, 4, 8), Progress = 0d, Cost = 889, BaselineCost = 803d, }); + taskDetails[0].ChildCollection[2].ChildCollection.Add(new Task() { ID = 23, Name = "Foundation inspection", StartDate = new DateTime(2012, 4, 8), EndDate = new DateTime(2012, 4, 10), BaselineStart = new DateTime(2012, 4, 7), BaselineEnd = new DateTime(2012, 4, 9), Progress = 0d, Cost = 8, BaselineCost = 8d, }); + taskDetails[0].ChildCollection[2].ChildCollection.Add(new Task() { ID = 24, Name = "Finishing Foundation", StartDate = new DateTime(2012, 4, 10), EndDate = new DateTime(2012, 4, 17), BaselineStart = new DateTime(2012, 4, 10), BaselineEnd = new DateTime(2012, 4, 17), Progress = 0d, Cost = 0, BaselineCost = 8d, }); + + taskDetails[0].ChildCollection.Add(new Task() { ID = 25, Name = "Framing", StartDate = new DateTime(2012, 4, 18), EndDate = new DateTime(2012, 4, 24), BaselineStart = new DateTime(2012, 4, 18), BaselineEnd = new DateTime(2012, 4, 24), Progress = 0d, Cost = 890, BaselineCost = 803d, }); + taskDetails[0].ChildCollection[3].ChildCollection.Add(new Task() { ID = 26, Name = "First Floor Framing", StartDate = new DateTime(2012, 4, 18), EndDate = new DateTime(2012, 4, 24), BaselineStart = new DateTime(2012, 4, 17), BaselineEnd = new DateTime(2012, 4, 23), Progress = 0d, Cost = 890, BaselineCost = 803d, }); + taskDetails[0].ChildCollection[3].ChildCollection.Add(new Task() { ID = 27, Name = "Second Floor Framing", StartDate = new DateTime(2012, 4, 24), EndDate = new DateTime(2012, 5, 3), BaselineStart = new DateTime(2012, 4, 24), BaselineEnd = new DateTime(2012, 5, 3), Progress = 0d, Cost = 789, BaselineCost = 898d, }); + taskDetails[0].ChildCollection[3].ChildCollection.Add(new Task() { ID = 28, Name = "Framing Roof", StartDate = new DateTime(2012, 5, 3), EndDate = new DateTime(2012, 5, 7), BaselineStart = new DateTime(2012, 5, 4), BaselineEnd = new DateTime(2012, 5, 8), Progress = 0d, Cost = 780, BaselineCost = 833d, }); + taskDetails[0].ChildCollection[3].ChildCollection.Add(new Task() { ID = 29, Name = "Framing Inspection", StartDate = new DateTime(2012, 5, 7), EndDate = new DateTime(2012, 5, 8), BaselineStart = new DateTime(2012, 5, 7), BaselineEnd = new DateTime(2012, 5, 8), Progress = 0d, Cost = 5, BaselineCost = 8d, }); + + taskDetails[0].ChildCollection.Add(new Task() { ID = 30, Name = "Dry In", StartDate = new DateTime(2012, 5, 8), EndDate = new DateTime(2012, 5, 14), BaselineStart = new DateTime(2012, 5, 8), BaselineEnd = new DateTime(2012, 5, 15), Progress = 0d, Cost = 232, BaselineCost = 323d, }); + taskDetails[0].ChildCollection[4].ChildCollection.Add(new Task() { ID = 31, Name = "Installing Sheathing for floors", StartDate = new DateTime(2012, 5, 8), EndDate = new DateTime(2012, 5, 14), BaselineStart = new DateTime(2012, 5, 9), BaselineEnd = new DateTime(2012, 5, 15), Progress = 0d, Cost = 232, BaselineCost = 323d, }); + taskDetails[0].ChildCollection[4].ChildCollection.Add(new Task() { ID = 32, Name = "Installing Windows", StartDate = new DateTime(2012, 5, 14), EndDate = new DateTime(2012, 5, 25), BaselineStart = new DateTime(2012, 5, 14), BaselineEnd = new DateTime(2012, 5, 25), Progress = 0d, Cost = 325, BaselineCost = 452d, }); + taskDetails[0].ChildCollection[4].ChildCollection.Add(new Task() { ID = 33, Name = "Installing Sheathing for Roof", StartDate = new DateTime(2012, 5, 25), EndDate = new DateTime(2012, 5, 30), BaselineStart = new DateTime(2012, 5, 23), BaselineEnd = new DateTime(2012, 5, 30), Progress = 0d, Cost = 82, BaselineCost = 83d, }); + + taskDetails[0].ChildCollection.Add(new Task() { ID = 34, Name = "Exterior Finishing", StartDate = new DateTime(2012, 5, 31), EndDate = new DateTime(2012, 6, 12), BaselineStart = new DateTime(2012, 5, 31), BaselineEnd = new DateTime(2012, 6, 12), Progress = 0d, Cost = 463, BaselineCost = 633d, }); + taskDetails[0].ChildCollection[5].ChildCollection.Add(new Task() { ID = 35, Name = "Exterior Trimming", StartDate = new DateTime(2012, 5, 31), EndDate = new DateTime(2012, 6, 12), BaselineStart = new DateTime(2012, 5, 31), BaselineEnd = new DateTime(2012, 6, 12), Progress = 0d, Cost = 463, BaselineCost = 633d, }); + taskDetails[0].ChildCollection[5].ChildCollection.Add(new Task() { ID = 36, Name = "Completing Exterior Bricks", StartDate = new DateTime(2012, 6, 12), EndDate = new DateTime(2012, 6, 17), BaselineStart = new DateTime(2012, 6, 12), BaselineEnd = new DateTime(2012, 6, 17), Progress = 0d, Cost = 234, BaselineCost = 333d, }); + + taskDetails[0].ChildCollection.Add(new Task() { ID = 37, Name = "Interior Finishing", StartDate = new DateTime(2012, 6, 17), EndDate = new DateTime(2012, 6, 19), BaselineStart = new DateTime(2012, 6, 17), BaselineEnd = new DateTime(2012, 6, 19), Progress = 0d, Cost = 43, BaselineCost = 33d, }); + + taskDetails[0].ChildCollection[6].ChildCollection.Add(new Task() { ID = 38, Name = "Installing Insulation", StartDate = new DateTime(2012, 6, 17), EndDate = new DateTime(2012, 6, 19), BaselineStart = new DateTime(2012, 6, 17), BaselineEnd = new DateTime(2012, 6, 19), Progress = 0d, Cost = 43, BaselineCost = 33d, }); + taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection.Add(new Task() { ID = 39, Name = "Install Floor Insulation", StartDate = new DateTime(2012, 6, 17), EndDate = new DateTime(2012, 6, 19), BaselineStart = new DateTime(2012, 6, 17), BaselineEnd = new DateTime(2012, 6, 19), Progress = 0d, Cost = 43, BaselineCost = 33d, }); + taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection.Add(new Task() { ID = 40, Name = "Install Wall Insulation", StartDate = new DateTime(2012, 6, 19), EndDate = new DateTime(2012, 6, 21), BaselineStart = new DateTime(2012, 6, 19), BaselineEnd = new DateTime(2012, 6, 21), Progress = 0d, Cost = 53, BaselineCost = 83d, }); + taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection.Add(new Task() { ID = 41, Name = "Install Ceiling Insulation", StartDate = new DateTime(2012, 6, 21), EndDate = new DateTime(2012, 6, 22), BaselineStart = new DateTime(2012, 6, 21), BaselineEnd = new DateTime(2012, 6, 22), Progress = 0d, Cost = 89, BaselineCost = 83d, }); + + taskDetails[0].ChildCollection[6].ChildCollection.Add(new Task() { ID = 42, Name = "Painting and Wallpaper", StartDate = new DateTime(2012, 6, 22), EndDate = new DateTime(2012, 6, 23), BaselineStart = new DateTime(2012, 6, 22), BaselineEnd = new DateTime(2012, 6, 23), Progress = 0d, Cost = 453, BaselineCost = 563, }); + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection.Add(new Task() { ID = 43, Name = "Painting all Interior", StartDate = new DateTime(2012, 6, 22), EndDate = new DateTime(2012, 6, 23), BaselineStart = new DateTime(2012, 6, 22), BaselineEnd = new DateTime(2012, 6, 23), Progress = 0d, Cost = 453, BaselineCost = 563, }); + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection.Add(new Task() { ID = 44, Name = "Painting all Exterior", StartDate = new DateTime(2012, 6, 23), EndDate = new DateTime(2012, 6, 25), BaselineStart = new DateTime(2012, 6, 23), BaselineEnd = new DateTime(2012, 6, 25), Progress = 0d, Cost = 352, BaselineCost = 342, }); + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection.Add(new Task() { ID = 45, Name = "Additional Trimming Work", StartDate = new DateTime(2012, 6, 25), EndDate = new DateTime(2012, 6, 27), BaselineStart = new DateTime(2012, 6, 25), BaselineEnd = new DateTime(2012, 6, 27), Progress = 0d, Cost = 32, BaselineCost = 50, }); + + taskDetails[0].ChildCollection[6].ChildCollection.Add(new Task() { ID = 46, Name = "Finishing Plumbing", StartDate = new DateTime(2012, 6, 27), EndDate = new DateTime(2012, 6, 29), BaselineStart = new DateTime(2012, 6, 27), BaselineEnd = new DateTime(2012, 6, 29), Progress = 0d, Cost = 424, BaselineCost = 423, }); + taskDetails[0].ChildCollection[6].ChildCollection[2].ChildCollection.Add(new Task() { ID = 47, Name = "First floor Plumbing", StartDate = new DateTime(2012, 6, 27), EndDate = new DateTime(2012, 6, 29), BaselineStart = new DateTime(2012, 6, 27), BaselineEnd = new DateTime(2012, 6, 29), Progress = 0d, Cost = 424, BaselineCost = 423, }); + taskDetails[0].ChildCollection[6].ChildCollection[2].ChildCollection.Add(new Task() { ID = 48, Name = "Second floor plumbing", StartDate = new DateTime(2012, 6, 29), EndDate = new DateTime(2012, 7, 1), BaselineStart = new DateTime(2012, 6, 29), BaselineEnd = new DateTime(2012, 7, 1), Progress = 0d, Cost = 234, BaselineCost = 324, }); + taskDetails[0].ChildCollection[6].ChildCollection[2].ChildCollection.Add(new Task() { ID = 49, Name = "Inspecting Plumbing", StartDate = new DateTime(2012, 7, 1), EndDate = new DateTime(2012, 7, 3), BaselineStart = new DateTime(2012, 7, 1), BaselineEnd = new DateTime(2012, 7, 3), Progress = 0d, Cost = 23, BaselineCost = 33d, }); + + taskDetails[0].ChildCollection[6].ChildCollection.Add(new Task() { ID = 50, Name = "Finishing Electrical", StartDate = new DateTime(2012, 7, 3), EndDate = new DateTime(2012, 7, 5), BaselineStart = new DateTime(2012, 7, 3), BaselineEnd = new DateTime(2012, 7, 5), Progress = 0d, Cost = 432, BaselineCost = 536, }); + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection.Add(new Task() { ID = 51, Name = "Progress first floor connections", StartDate = new DateTime(2012, 7, 3), EndDate = new DateTime(2012, 7, 5), BaselineStart = new DateTime(2012, 7, 3), BaselineEnd = new DateTime(2012, 7, 5), Progress = 0d, Cost = 432, BaselineCost = 536, }); + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection.Add(new Task() { ID = 52, Name = "Progress second floor connections", StartDate = new DateTime(2012, 7, 5), EndDate = new DateTime(2012, 7, 7), BaselineStart = new DateTime(2012, 7, 4), BaselineEnd = new DateTime(2012, 7, 6), Progress = 0d, Cost = 563, BaselineCost = 463, }); + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection.Add(new Task() { ID = 53, Name = "Progress non-Electrical Wiring", StartDate = new DateTime(2012, 7, 7), EndDate = new DateTime(2012, 7, 8), BaselineStart = new DateTime(2012, 7, 7), BaselineEnd = new DateTime(2012, 7, 8), Progress = 0d, Cost = 234, BaselineCost = 563, }); + + taskDetails[0].ChildCollection[6].ChildCollection.Add(new Task() { ID = 54, Name = "Carpet,Tiles and Furnishing", StartDate = new DateTime(2012, 7, 8), EndDate = new DateTime(2012, 7, 10), BaselineStart = new DateTime(2012, 7, 9), BaselineEnd = new DateTime(2012, 7, 11), Progress = 0d, Cost = 253, BaselineCost = 210, }); + taskDetails[0].ChildCollection[6].ChildCollection[4].ChildCollection.Add(new Task() { ID = 55, Name = "Progress first floor carpet", StartDate = new DateTime(2012, 7, 8), EndDate = new DateTime(2012, 7, 10), BaselineStart = new DateTime(2012, 7, 8), BaselineEnd = new DateTime(2012, 7, 10), Progress = 0d, Cost = 253, BaselineCost = 210, }); + taskDetails[0].ChildCollection[6].ChildCollection[4].ChildCollection.Add(new Task() { ID = 56, Name = "Progress second floor carpet", StartDate = new DateTime(2012, 7, 10), EndDate = new DateTime(2012, 7, 13), BaselineStart = new DateTime(2012, 7, 10), BaselineEnd = new DateTime(2012, 7, 13), Progress = 0d, Cost = 341, BaselineCost = 300, }); + taskDetails[0].ChildCollection[6].ChildCollection[4].ChildCollection.Add(new Task() { ID = 57, Name = "Progress Furnishing Kitchen, bath, hall", StartDate = new DateTime(2012, 7, 13), EndDate = new DateTime(2012, 7, 14), BaselineStart = new DateTime(2012, 7, 13), BaselineEnd = new DateTime(2012, 7, 14), Progress = 0, Cost = 4252, BaselineCost = 6033d, }); + + taskDetails[0].ChildCollection.Add(new Task() { ID = 58, Name = "Final Acceptance", StartDate = new DateTime(2012, 7, 14), EndDate = new DateTime(2012, 7, 16), BaselineStart = new DateTime(2012, 7, 14), BaselineEnd = new DateTime(2012, 7, 16), Progress = 0d, Cost = 430, BaselineCost = 433d, }); + taskDetails[0].ChildCollection[7].ChildCollection.Add(new Task() { ID = 59, Name = "Cleaning", StartDate = new DateTime(2012, 7, 14), EndDate = new DateTime(2012, 7, 16), BaselineStart = new DateTime(2012, 7, 14), BaselineEnd = new DateTime(2012, 7, 16), Progress = 0d, Cost = 430, BaselineCost = 433d, }); + taskDetails[0].ChildCollection[7].ChildCollection.Add(new Task() { ID = 60, Name = "Final Inspection", StartDate = new DateTime(2012, 7, 16), EndDate = new DateTime(2012, 7, 17), BaselineStart = new DateTime(2012, 7, 16), BaselineEnd = new DateTime(2012, 7, 17), Progress = 0d, Cost = 0, BaselineCost = 5, }); + taskDetails[0].ChildCollection[7].ChildCollection.Add(new Task() { ID = 61, Name = "Move In", StartDate = new DateTime(2012, 7, 17), EndDate = new DateTime(2012, 7, 17), BaselineStart = new DateTime(2012, 7, 18), BaselineEnd = new DateTime(2012, 7, 18), Progress = 0d, Cost = 0, BaselineCost = 0, }); + + //Adding Resources + taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection[0].Resource.Add(ResidentialConstructionResources[1]); + taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection[0].Resource.Add(ResidentialConstructionResources[0]); + taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection[0].Resource.Add(ResidentialConstructionResources[2]); + + taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection[1].Resource.Add(ResidentialConstructionResources[0]); + taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection[1].Resource.Add(ResidentialConstructionResources[1]); + taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection[1].Resource.Add(ResidentialConstructionResources[2]); + + taskDetails[0].ChildCollection[1].ChildCollection[0].Resource.Add(ResidentialConstructionResources[3]); + taskDetails[0].ChildCollection[1].ChildCollection[1].Resource.Add(ResidentialConstructionResources[3]); + taskDetails[0].ChildCollection[1].ChildCollection[2].Resource.Add(ResidentialConstructionResources[5]); + taskDetails[0].ChildCollection[1].ChildCollection[2].Resource.Add(ResidentialConstructionResources[6]); + taskDetails[0].ChildCollection[1].ChildCollection[2].Resource.Add(ResidentialConstructionResources[4]); + + taskDetails[0].ChildCollection[2].ChildCollection[0].Resource.Add(ResidentialConstructionResources[3]); + taskDetails[0].ChildCollection[2].ChildCollection[1].Resource.Add(ResidentialConstructionResources[6]); + taskDetails[0].ChildCollection[2].ChildCollection[2].Resource.Add(ResidentialConstructionResources[7]); + taskDetails[0].ChildCollection[2].ChildCollection[3].Resource.Add(ResidentialConstructionResources[3]); + + taskDetails[0].ChildCollection[3].ChildCollection[0].Resource.Add(ResidentialConstructionResources[8]); + taskDetails[0].ChildCollection[3].ChildCollection[1].Resource.Add(ResidentialConstructionResources[8]); + taskDetails[0].ChildCollection[3].ChildCollection[2].Resource.Add(ResidentialConstructionResources[9]); + taskDetails[0].ChildCollection[3].ChildCollection[3].Resource.Add(ResidentialConstructionResources[7]); + + taskDetails[0].ChildCollection[4].ChildCollection[0].Resource.Add(ResidentialConstructionResources[8]); + taskDetails[0].ChildCollection[4].ChildCollection[1].Resource.Add(ResidentialConstructionResources[9]); + taskDetails[0].ChildCollection[4].ChildCollection[2].Resource.Add(ResidentialConstructionResources[8]); + + taskDetails[0].ChildCollection[5].ChildCollection[0].Resource.Add(ResidentialConstructionResources[14]); + taskDetails[0].ChildCollection[5].ChildCollection[1].Resource.Add(ResidentialConstructionResources[8]); + + taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection[0].Resource.Add(ResidentialConstructionResources[10]); + taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection[1].Resource.Add(ResidentialConstructionResources[10]); + taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection[2].Resource.Add(ResidentialConstructionResources[10]); + + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection[0].Resource.Add(ResidentialConstructionResources[12]); + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection[1].Resource.Add(ResidentialConstructionResources[12]); + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection[2].Resource.Add(ResidentialConstructionResources[12]); + + taskDetails[0].ChildCollection[6].ChildCollection[2].ChildCollection[0].Resource.Add(ResidentialConstructionResources[5]); + taskDetails[0].ChildCollection[6].ChildCollection[2].ChildCollection[1].Resource.Add(ResidentialConstructionResources[5]); + taskDetails[0].ChildCollection[6].ChildCollection[2].ChildCollection[2].Resource.Add(ResidentialConstructionResources[7]); + + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection[0].Resource.Add(ResidentialConstructionResources[4]); + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection[1].Resource.Add(ResidentialConstructionResources[4]); + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection[2].Resource.Add(ResidentialConstructionResources[4]); + + taskDetails[0].ChildCollection[6].ChildCollection[4].ChildCollection[0].Resource.Add(ResidentialConstructionResources[13]); + taskDetails[0].ChildCollection[6].ChildCollection[4].ChildCollection[1].Resource.Add(ResidentialConstructionResources[13]); + taskDetails[0].ChildCollection[6].ChildCollection[4].ChildCollection[2].Resource.Add(ResidentialConstructionResources[14]); + + taskDetails[0].ChildCollection[7].ChildCollection[0].Resource.Add(ResidentialConstructionResources[16]); + taskDetails[0].ChildCollection[7].ChildCollection[1].Resource.Add(ResidentialConstructionResources[7]); + taskDetails[0].ChildCollection[7].ChildCollection[2].Resource.Add(ResidentialConstructionResources[1]); + + //Adding Predecessors + taskDetails[0].ChildCollection[0].ChildCollection[0].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 4, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 5, GanttTaskRelationship = GanttTaskRelationship.FinishToFinish }); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 5, GanttTaskRelationship = GanttTaskRelationship.FinishToFinish }); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 5, GanttTaskRelationship = GanttTaskRelationship.FinishToFinish }); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection[3].Predecessor.Add(new Predecessor() { GanttTaskIndex = 5, GanttTaskRelationship = GanttTaskRelationship.FinishToFinish }); + taskDetails[0].ChildCollection[0].ChildCollection[1].ChildCollection[4].Predecessor.Add(new Predecessor() { GanttTaskIndex = 5, GanttTaskRelationship = GanttTaskRelationship.FinishToFinish }); + + taskDetails[0].ChildCollection[0].ChildCollection[2].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 5, GanttTaskRelationship = GanttTaskRelationship.FinishToFinish }); + taskDetails[0].ChildCollection[0].ChildCollection[2].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 5, GanttTaskRelationship = GanttTaskRelationship.FinishToFinish }); + taskDetails[0].ChildCollection[0].ChildCollection[2].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 5, GanttTaskRelationship = GanttTaskRelationship.FinishToFinish }); + + taskDetails[0].ChildCollection[1].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 13, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[1].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 14, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[1].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 15, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[1].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 17, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[1].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 18, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[2].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 19, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[2].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 21, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[2].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 19, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[2].ChildCollection[3].Predecessor.Add(new Predecessor() { GanttTaskIndex = 23, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[3].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 24, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[3].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 26, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[3].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 27, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[3].ChildCollection[3].Predecessor.Add(new Predecessor() { GanttTaskIndex = 28, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[4].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 29, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[4].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 31, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[4].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 32, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[5].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 33, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[5].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 35, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 36, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 39, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[0].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 40, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 41, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 43, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 44, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[1].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 43, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[6].ChildCollection[2].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 45, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[2].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 47, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[2].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 48, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 49, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 48, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 51, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[3].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 52, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[6].ChildCollection[4].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 53, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[4].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 55, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[6].ChildCollection[4].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 56, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + taskDetails[0].ChildCollection[7].ChildCollection[0].Predecessor.Add(new Predecessor() { GanttTaskIndex = 57, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[7].ChildCollection[1].Predecessor.Add(new Predecessor() { GanttTaskIndex = 59, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + taskDetails[0].ChildCollection[7].ChildCollection[2].Predecessor.Add(new Predecessor() { GanttTaskIndex = 60, GanttTaskRelationship = GanttTaskRelationship.FinishToStart }); + + return taskDetails; + } + + /// + /// Gets the resources. + /// + /// + private static ObservableCollection GetResources() + { + ObservableCollection Resources = new ObservableCollection(); + Resources.Add(new Resource() { ID = 1, Name = "General Contractor" }); + Resources.Add(new Resource() { ID = 2, Name = "Owner" }); + Resources.Add(new Resource() { ID = 3, Name = "Architect" }); + Resources.Add(new Resource() { ID = 4, Name = "Site Excavation Contractor" }); + Resources.Add(new Resource() { ID = 5, Name = "Electrical Contractor" }); + Resources.Add(new Resource() { ID = 6, Name = "Plumbing Contractor" }); + Resources.Add(new Resource() { ID = 7, Name = "Concrete Contractor" }); + Resources.Add(new Resource() { ID = 8, Name = "Inspector" }); + Resources.Add(new Resource() { ID = 9, Name = "Framing Contractor" }); + Resources.Add(new Resource() { ID = 10, Name = "Roofing Contractor" }); + Resources.Add(new Resource() { ID = 11, Name = "Insulation Contractor" }); + Resources.Add(new Resource() { ID = 12, Name = "Drywall contractor" }); + Resources.Add(new Resource() { ID = 13, Name = "Painting Contractor" }); + Resources.Add(new Resource() { ID = 14, Name = "Flooring Contractor" }); + Resources.Add(new Resource() { ID = 15, Name = "Appliance Contractor" }); + Resources.Add(new Resource() { ID = 16, Name = "Masonry Contractor" }); + Resources.Add(new Resource() { ID = 17, Name = "MaID Service" }); + + return Resources; + } +} + +{% endhighlight %} {% endtabs %} Sample Project Statistic Visual: diff --git a/wpf/Gantt/import-and-export-support.md b/wpf/Gantt/import-and-export-support.md index 2a56a55a42..c24122de24 100644 --- a/wpf/Gantt/import-and-export-support.md +++ b/wpf/Gantt/import-and-export-support.md @@ -118,9 +118,26 @@ The following code illustrates how to Import and Export Task Details from or to {% highlight c# %} +//Initializing Gantt +this.ganttControl.ItemsSource = new ViewModel().TaskCollection; + +// Task attribute mapping +TaskAttributeMapping taskAttributeMapping = new TaskAttributeMapping(); +taskAttributeMapping.TaskIdMapping = "TaskId"; +taskAttributeMapping.TaskNameMapping = "TaskName"; +taskAttributeMapping.StartDateMapping = "StartDate"; +taskAttributeMapping.ChildMapping = "Child"; +taskAttributeMapping.FinishDateMapping = "FinishDate"; +taskAttributeMapping.DurationMapping = "Duration"; +taskAttributeMapping.MileStoneMapping = "IsMileStone"; +taskAttributeMapping.PredecessorMapping = "Predecessor"; +taskAttributeMapping.ProgressMapping = "Progress"; +taskAttributeMapping.ResourceInfoMapping = "Resource"; +this.ganttControl.TaskAttributeMapping = taskAttributeMapping; + private void OnSaveButtonClick(object sender, System.Windows.RoutedEventArgs e) { - if (this.Gantt.ExportToXML()) + if (this.ganttControl.ExportToXML()) { MessageBox.Show("Tasks exported successfully.", "XML Import/Export", @@ -131,7 +148,7 @@ private void OnSaveButtonClick(object sender, System.Windows.RoutedEventArgs e) private void OnOpenButtonClick(object sender, System.Windows.RoutedEventArgs e) { - if (this.Gantt.ImportFromXML()) + if (this.ganttControl.ImportFromXML()) { MessageBox.Show("Tasks imported successfully.", "XML Import/Export", @@ -140,23 +157,6 @@ private void OnOpenButtonClick(object sender, System.Windows.RoutedEventArgs e) } } -//Initializing Gantt -this.ganttControl.ItemsSource = new ViewModel().TaskCollection; - -// Task attribute mapping -TaskAttributeMapping taskAttributeMapping = new TaskAttributeMapping(); -taskAttributeMapping.TaskIdMapping = "TaskId"; -taskAttributeMapping.TaskNameMapping = "TaskName"; -taskAttributeMapping.StartDateMapping = "StartDate"; -taskAttributeMapping.ChildMapping = "Child"; -taskAttributeMapping.FinishDateMapping = "FinishDate"; -taskAttributeMapping.DurationMapping = "Duration"; -taskAttributeMapping.MileStoneMapping = "IsMileStone"; -taskAttributeMapping.PredecessorMapping = "Predecessor"; -taskAttributeMapping.ProgressMapping = "Progress"; -taskAttributeMapping.ResourceInfoMapping = "Resource"; -this.ganttControl.TaskAttributeMapping = taskAttributeMapping; - {% endhighlight %} {% highlight c# tabtitle="ViewModel.cs" %} diff --git a/wpf/Gantt/zooming.md b/wpf/Gantt/zooming.md index d08f2ed900..627278f3df 100644 --- a/wpf/Gantt/zooming.md +++ b/wpf/Gantt/zooming.md @@ -113,7 +113,7 @@ slider.ValueChanged += OnSliderValueChanged; void OnSliderValueChanged(object sender, RoutedPropertyChangedEventArgs e) { //Changing the value of zoom factor - this.Gantt.ZoomFactor = (sender as Slider).Value; + this.ganttControl.ZoomFactor = (sender as Slider).Value; } {% endhighlight %} From 3a36611313248360960298d8113b6596c8101177 Mon Sep 17 00:00:00 2001 From: Satish Raj <154953536+satishraj-sf4377@users.noreply.github.com> Date: Wed, 26 Jun 2024 12:07:24 +0530 Subject: [PATCH 16/21] WPF-889895-Removed the Highlights from the properties with link as suggested in the review --- wpf/Diagram/Page-Settings.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wpf/Diagram/Page-Settings.md b/wpf/Diagram/Page-Settings.md index e5e8951b35..900a2e6205 100644 --- a/wpf/Diagram/Page-Settings.md +++ b/wpf/Diagram/Page-Settings.md @@ -11,9 +11,9 @@ documentation: ug By default, Diagram's page size is decided based on the position of diagramming elements. The size and appearance of the diagram pages can be customized using the [PageSettings](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html ) property of `SfDiagram`. -* The [`PageWidth`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_PageWidth) and [`PageHeight`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_PageHeight) properties of `PageSettings` define the size of the page. -* The [`PageOrientation`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_PageOrientation) property of `PageSettings` used to change the page orientation to portrait or landscape. -* Page breaks are used as a visual guide to see how the pages split into multiple pages. The [`ShowPageBreaks`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_ShowPageBreaks) property decides the Visibility of Page breaks. +* The [PageWidth](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_PageWidth) and [PageHeight](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_PageHeight) properties of `PageSettings` define the size of the page. +* The [PageOrientation](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_PageOrientation) property of `PageSettings` used to change the page orientation to portrait or landscape. +* Page breaks are used as a visual guide to see how the pages split into multiple pages. The [ShowPageBreaks](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_ShowPageBreaks) property decides the Visibility of Page breaks. {% tabs %} {% highlight xaml %} From 99159a80fbb20b366074b8ca27d11c84c706550d Mon Sep 17 00:00:00 2001 From: Satish Raj <154953536+satishraj-sf4377@users.noreply.github.com> Date: Wed, 26 Jun 2024 12:10:00 +0530 Subject: [PATCH 17/21] WPF-889895-Removed All of the Highlights from the properties with link as suggested in the review --- wpf/Diagram/Page-Settings.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/wpf/Diagram/Page-Settings.md b/wpf/Diagram/Page-Settings.md index 900a2e6205..d45a82b741 100644 --- a/wpf/Diagram/Page-Settings.md +++ b/wpf/Diagram/Page-Settings.md @@ -51,7 +51,7 @@ diagram.PageSettings = new PageSettings() ## How to enable the multiple page -Based on the diagramming element position, the size of the page dynamically increases or decreases in multiples of page width and height using the [`MultiplePage`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_MultiplePage) property of PageSettings. +Based on the diagramming element position, the size of the page dynamically increases or decreases in multiples of page width and height using the [MultiplePage](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_MultiplePage) property of PageSettings. {% tabs %} {% highlight xaml %} @@ -131,7 +131,7 @@ diagram.PageSettings = new PageSettings() ## How to change the margin around the pages -The area between the main content of a page and the page edges can be changed by using the [`PrintMargin`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_PrintMargin) property. Default value is 24. +The area between the main content of a page and the page edges can be changed by using the [PrintMargin](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_PrintMargin) property. Default value is 24. {% tabs %} {% highlight xaml %} @@ -164,7 +164,7 @@ diagram.PageSettings = new PageSettings() ## How to change the unit of the page -The measurement units of the page can be changed by using the [`Unit`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_Unit) property of `PageSettings` class. Default unit value is Pixels. +The measurement units of the page can be changed by using the [Unit](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_Unit) property of `PageSettings` class. Default unit value is Pixels. {% tabs %} {% highlight xaml %} @@ -199,7 +199,7 @@ diagram.PageSettings = new PageSettings() ## How to change the scaling of Page -The [`PrintScale`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_PrintScale) property of `PageSettings` class allows you to reduce or enlarge the diagram page to fit into specific area when you print it. The default scaling of the page will be 1 (i.e 100%). +The [PrintScale](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_PrintScale) property of `PageSettings` class allows you to reduce or enlarge the diagram page to fit into specific area when you print it. The default scaling of the page will be 1 (i.e 100%). {% tabs %} {% highlight xaml %} @@ -233,7 +233,7 @@ diagram.PageSettings = new PageSettings() {% endhighlight %} {% endtabs %} -You can restrict the diagram page scaling to minimum and maximum values by using the [`MinimumPrintScale`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_MinimumPrintScale) and [`MaximumPrintScale`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_MaximumPrintScale) properties. +You can restrict the diagram page scaling to minimum and maximum values by using the [MinimumPrintScale](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_MinimumPrintScale) and [MaximumPrintScale](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_MaximumPrintScale) properties. {% tabs %} {% highlight xaml %} @@ -273,7 +273,7 @@ diagram.PageSettings = new PageSettings() By default, origin of the diagram page will be at (0,0). A virtual method `AdjustPageOrigin` of PageSettings class is used to customize the origin of the page based on the page size (`PageWidth` and `PageHeight`) and diagram elements position, which in turn helps to reduce the number of pages being printed. -The `AdjustPageOrigin` method contains the [`Info`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_Info) property in its argument, and also have the following properties and methods: +The `AdjustPageOrigin` method contains the [Info](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.PageSettings.html#Syncfusion_UI_Xaml_Diagram_PageSettings_Info) property in its argument, and also have the following properties and methods: | Properties/Methods | Description | Output | |---|---|---| From 6345db9d737d2d635c051bd377e0152f620d90b5 Mon Sep 17 00:00:00 2001 From: Satish Raj <154953536+satishraj-sf4377@users.noreply.github.com> Date: Wed, 26 Jun 2024 12:21:26 +0530 Subject: [PATCH 18/21] WPF-889895-Highlighted the properties and remove the highlight from the properties with link as Suggested in the Review --- wpf/Diagram/Snapping/DefineSnapping.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wpf/Diagram/Snapping/DefineSnapping.md b/wpf/Diagram/Snapping/DefineSnapping.md index e58e02b38d..d033926a88 100644 --- a/wpf/Diagram/Snapping/DefineSnapping.md +++ b/wpf/Diagram/Snapping/DefineSnapping.md @@ -9,7 +9,7 @@ documentation: ug # Snapping in WPF Diagram (SfDiagram) -When you draw, resize, or move a diagramming element in the page, you can set it, so that it will align or snap to the nearest intersection in the page even when the grid is visible or not. However, you can control the alignment and snap-to capabilities of elements by using the snapping option of SfDiagram. +When you draw, resize, or move a diagramming element in the page, you can set it, so that it will align or snap to the nearest intersection in the page even when the grid is visible or not. However, you can control the alignment and snap-to capabilities of elements by using the snapping option of `SfDiagram`. The `SnapSettings` class and its properties allows you to snap the shapes to the ruler subdivisions more easily. @@ -71,7 +71,7 @@ diagram.SnapSettings.SnapToObject = SnapToObject.All; ## How to change the snap indication style -When snapping, cyan shade color indication lines will be shown. These indication lines styles can be customized by using the [`SnapIndicatorStyle`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.SnapSettings.html#Syncfusion_UI_Xaml_Diagram_SnapSettings_SnapIndicatorStyle) property of `SnapSettings` class. +When snapping, cyan shade color indication lines will be shown. These indication lines styles can be customized by using the [SnapIndicatorStyle](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.SnapSettings.html#Syncfusion_UI_Xaml_Diagram_SnapSettings_SnapIndicatorStyle) property of `SnapSettings` class. {% tabs %} {% highlight xaml %} From d8ced9fbfd00f172e6c489793f90179324162e4a Mon Sep 17 00:00:00 2001 From: Satish Raj <154953536+satishraj-sf4377@users.noreply.github.com> Date: Wed, 26 Jun 2024 12:27:09 +0530 Subject: [PATCH 19/21] WPF-889895-Removed the highlight from the properties with link --- wpf/Diagram/Scroll-Settings/AutoScrollLimit.md | 2 +- wpf/Diagram/Scroll-Settings/DragLimit.md | 4 ++-- wpf/Diagram/Scroll-Settings/ScrollLimit.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/wpf/Diagram/Scroll-Settings/AutoScrollLimit.md b/wpf/Diagram/Scroll-Settings/AutoScrollLimit.md index 68e6989aaa..4873c29c49 100644 --- a/wpf/Diagram/Scroll-Settings/AutoScrollLimit.md +++ b/wpf/Diagram/Scroll-Settings/AutoScrollLimit.md @@ -9,7 +9,7 @@ documentation: ug # Auto-Scroll Limit in WPF Diagram (SfDiagram) -The auto-scroll limit allows you to define the scrollable region of the Diagram while the page is getting auto scrolled. The [`AutoScrollLimit`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.ScrollSettings.html#Syncfusion_UI_Xaml_Diagram_ScrollSettings_AutoScrollLimit) property of scroll settings class helps to limit the auto scrolling area. It includes the following options: +The auto-scroll limit allows you to define the scrollable region of the Diagram while the page is getting auto scrolled. The [AutoScrollLimit](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.ScrollSettings.html#Syncfusion_UI_Xaml_Diagram_ScrollSettings_AutoScrollLimit) property of scroll settings class helps to limit the auto scrolling area. It includes the following options: * **Infinity**: Allows auto-scroll in all directions without any restriction. * **Diagram**: Allows auto-scroll within the Diagram content. diff --git a/wpf/Diagram/Scroll-Settings/DragLimit.md b/wpf/Diagram/Scroll-Settings/DragLimit.md index 995e661c34..2d206d7091 100644 --- a/wpf/Diagram/Scroll-Settings/DragLimit.md +++ b/wpf/Diagram/Scroll-Settings/DragLimit.md @@ -9,11 +9,11 @@ documentation: ug # Drag Limit in WPF Diagram (SfDiagram) -The drag limit allows you to define the dragging region of the Diagram while diagram objects are getting dragged. The [`DragLimit`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.ScrollSettings.html#Syncfusion_UI_Xaml_Diagram_ScrollSettings_DragLimit) property of scroll settings class helps to limit the dragging area. It includes the following options: +The drag limit allows you to define the dragging region of the Diagram while diagram objects are getting dragged. The [DragLimit](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.ScrollSettings.html#Syncfusion_UI_Xaml_Diagram_ScrollSettings_DragLimit) property of scroll settings class helps to limit the dragging area. It includes the following options: * **Infinity**: Allows you to drag the diagram objects in all directions without any restriction. * **Diagram**: Allows you to drag the diagram objects within the Diagram content. -* **Limited**: Allows you to drag the diagram objects within the specified area. The [`EditableArea`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.ScrollSettings.html#Syncfusion_UI_Xaml_Diagram_ScrollSettings_EditableArea) property is used to specify the area that is allowed to dragging. +* **Limited**: Allows you to drag the diagram objects within the specified area. The [EditableArea](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.ScrollSettings.html#Syncfusion_UI_Xaml_Diagram_ScrollSettings_EditableArea) property is used to specify the area that is allowed to dragging. The default operation is `Infinity`. diff --git a/wpf/Diagram/Scroll-Settings/ScrollLimit.md b/wpf/Diagram/Scroll-Settings/ScrollLimit.md index 4c92ce2fb5..b7e629cae8 100644 --- a/wpf/Diagram/Scroll-Settings/ScrollLimit.md +++ b/wpf/Diagram/Scroll-Settings/ScrollLimit.md @@ -9,7 +9,7 @@ documentation: ug # Scroll Limit in WPF Diagram (SfDiagram) -The scroll limit allows you to define the scrollable region of the Diagram while mouse scrolling on the page. The [`ScrollLimit`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.ScrollSettings.html#Syncfusion_UI_Xaml_Diagram_ScrollSettings_ScrollLimit) property of scroll settings helps to limit the scrolling area. It includes the following options: +The scroll limit allows you to define the scrollable region of the Diagram while mouse scrolling on the page. The [ScrollLimit](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.ScrollSettings.html#Syncfusion_UI_Xaml_Diagram_ScrollSettings_ScrollLimit) property of scroll settings helps to limit the scrolling area. It includes the following options: * **Infinity**: Allows you to scroll in all directions without any restriction. * **Diagram**: Allows you to scroll within the Diagram content. From 054382d642759c2dfbc9f7494d174b21493efeec Mon Sep 17 00:00:00 2001 From: Satish Raj <154953536+satishraj-sf4377@users.noreply.github.com> Date: Wed, 26 Jun 2024 12:39:46 +0530 Subject: [PATCH 20/21] WPF-889895-Removed the highlight from the properties with link --- wpf/Diagram/Interaction/Selection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wpf/Diagram/Interaction/Selection.md b/wpf/Diagram/Interaction/Selection.md index 3b8b2a93c0..9aa45a3df1 100644 --- a/wpf/Diagram/Interaction/Selection.md +++ b/wpf/Diagram/Interaction/Selection.md @@ -45,7 +45,7 @@ Multiple selected elements are visually represented as shown. #### Selection mode -[`SingleSelectionMode`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.SfDiagram.html#Syncfusion_UI_Xaml_Diagram_SfDiagram_SingleSelectionMode) and [`MultipleSelectionMode`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.SfDiagram.html#Syncfusion_UI_Xaml_Diagram_SfDiagram_MultipleSelectionMode) properties of SfDiagram allows us to decide which kind of selection need to be handle .To explore about modes, please refer to [SingleSelectionMode](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.SingleSelectionMode.html) and [MultipleSelectionMode](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.MultipleSelectionMode.html). +[SingleSelectionMode](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.SfDiagram.html#Syncfusion_UI_Xaml_Diagram_SfDiagram_SingleSelectionMode) and [MultipleSelectionMode](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.SfDiagram.html#Syncfusion_UI_Xaml_Diagram_SfDiagram_MultipleSelectionMode) properties of `SfDiagram` allows us to decide which kind of selection need to be handle .To explore about modes, please refer to [SingleSelectionMode](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.SingleSelectionMode.html) and [MultipleSelectionMode](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.MultipleSelectionMode.html). |SingleSelectionMode|Description| |--|--| From e68d1dc080ff919ec0957128bd742bc4998eecb2 Mon Sep 17 00:00:00 2001 From: Satish Raj <154953536+satishraj-sf4377@users.noreply.github.com> Date: Wed, 26 Jun 2024 12:49:58 +0530 Subject: [PATCH 21/21] WPF-889895-Removed highlight from the properties with link --- wpf/Diagram/Interaction/UserHandle.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/wpf/Diagram/Interaction/UserHandle.md b/wpf/Diagram/Interaction/UserHandle.md index 6db620f661..3bc2d7637c 100644 --- a/wpf/Diagram/Interaction/UserHandle.md +++ b/wpf/Diagram/Interaction/UserHandle.md @@ -64,15 +64,15 @@ Appearance of the [QuickCommand](https://help.syncfusion.com/cr/wpf/Syncfusion.U ![custom appearance of quick command](Interaction_images/quickcommand_img3.png) -N> By default QuickCommand will host on Node. [`VisibilityMode`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.QuickCommandViewModel.html#Syncfusion_UI_Xaml_Diagram_QuickCommandViewModel_VisibilityMode) property is to define the host of the QuickCommand on either Node or Connector or both. +N> By default QuickCommand will host on Node. [VisibilityMode](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.QuickCommandViewModel.html#Syncfusion_UI_Xaml_Diagram_QuickCommandViewModel_VisibilityMode) property is to define the host of the QuickCommand on either Node or Connector or both. ### Alignment QuickCommand can be aligned relative to boundaries of the Node or segments of the Connector. -* [`OffsetX`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.QuickCommandViewModel.html#Syncfusion_UI_Xaml_Diagram_QuickCommandViewModel_OffsetX) and [`OffsetY`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.QuickCommandViewModel.html#Syncfusion_UI_Xaml_Diagram_QuickCommandViewModel_OffsetY) property of QuickCommand is used to align the QuickCommand based on fractions. The default value is 0.5. -* [`HorizontalAlignment`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.QuickCommandViewModel.html#Syncfusion_UI_Xaml_Diagram_QuickCommandViewModel_HorizontalAlignment) and [`VerticalAlignment`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.QuickCommandViewModel.html#Syncfusion_UI_Xaml_Diagram_QuickCommandViewModel_VerticalAlignment) properties are used to align the quick commands for horizontal and vertical positions. -* [`Margin`](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.QuickCommandViewModel.html#Syncfusion_UI_Xaml_Diagram_QuickCommandViewModel_Margin) is an absolute value used to add some blank space in any one of its four sides. +* [OffsetX](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.QuickCommandViewModel.html#Syncfusion_UI_Xaml_Diagram_QuickCommandViewModel_OffsetX) and [OffsetY](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.QuickCommandViewModel.html#Syncfusion_UI_Xaml_Diagram_QuickCommandViewModel_OffsetY) property of QuickCommand is used to align the QuickCommand based on fractions. The default value is 0.5. +* [HorizontalAlignment](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.QuickCommandViewModel.html#Syncfusion_UI_Xaml_Diagram_QuickCommandViewModel_HorizontalAlignment) and [VerticalAlignment](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.QuickCommandViewModel.html#Syncfusion_UI_Xaml_Diagram_QuickCommandViewModel_VerticalAlignment) properties are used to align the quick commands for horizontal and vertical positions. +* [Margin](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Diagram.QuickCommandViewModel.html#Syncfusion_UI_Xaml_Diagram_QuickCommandViewModel_Margin) is an absolute value used to add some blank space in any one of its four sides. The Alignment of QuickCommand is similar to [Annotation Alignment](https://help.syncfusion.com/wpf/sfdiagram/annotation/positioningandappearance).