diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/A.ico b/AIStudio.Wpf.DiagramDesigner.Demo/A.ico
new file mode 100644
index 0000000..b02b588
Binary files /dev/null and b/AIStudio.Wpf.DiagramDesigner.Demo/A.ico differ
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/AIStudio.Wpf.DiagramDesigner.Demo.csproj b/AIStudio.Wpf.DiagramDesigner.Demo/AIStudio.Wpf.DiagramDesigner.Demo.csproj
index ade4264..e51ccd7 100644
--- a/AIStudio.Wpf.DiagramDesigner.Demo/AIStudio.Wpf.DiagramDesigner.Demo.csproj
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/AIStudio.Wpf.DiagramDesigner.Demo.csproj
@@ -6,6 +6,11 @@
+
+
+
+
+
@@ -14,4 +19,12 @@
+
+
+
+
+
+
+
+
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/App.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/App.xaml
index 53a6e84..b4d2d46 100644
--- a/AIStudio.Wpf.DiagramDesigner.Demo/App.xaml
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/App.xaml
@@ -60,6 +60,10 @@
+
+
+
+
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml
index 7423cc4..9ec7384 100644
--- a/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml
@@ -1,11 +1,14 @@
-
+ Title="AIStudio.Wpf.DiagramDesigner.Demo"
+ Icon="A.ico"
+ Style="{StaticResource AIStudio.Styles.WindowBase}"
+ Height="450" Width="800">
@@ -20,4 +23,4 @@
Grid.Column="1"
Margin="0" />
-
+
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml.cs b/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml.cs
index 3bded18..e50c90f 100644
--- a/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml.cs
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/MainWindow.xaml.cs
@@ -12,6 +12,7 @@ using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
+using AIStudio.Wpf.Controls;
using AIStudio.Wpf.DiagramDesigner.Demo.ViewModels;
namespace AIStudio.Wpf.DiagramDesigner.Demo
@@ -19,7 +20,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo
///
/// Interaction logic for MainWindow.xaml
///
- public partial class MainWindow : Window
+ public partial class MainWindow : WindowBase
{
#region Identity
private static IDictionary _viewDic;
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Base/BaseViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Base/BaseViewModel.cs
index 4299d1c..01574ea 100644
--- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Base/BaseViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Base/BaseViewModel.cs
@@ -28,5 +28,15 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
{
get; set;
}
+
+ public int Index
+ {
+ get; set;
+ }
+
+ public int ParentIndex
+ {
+ get; set;
+ }
}
}
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/CustomNodeViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/CustomNodeViewModel.cs
index 4922dc9..c136b60 100644
--- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/CustomNodeViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/CustomNodeViewModel.cs
@@ -36,6 +36,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
ConnectionViewModel connector2 = new ConnectionViewModel(node2.BottomConnector, node3.BottomConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
DiagramViewModel.DirectAddItemCommand.Execute(connector2);
+ DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
}
}
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Customization/ThickLinkViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Customization/ThickLinkViewModel.cs
new file mode 100644
index 0000000..40c72fc
--- /dev/null
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Customization/ThickLinkViewModel.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Text;
+using System.Windows;
+
+namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
+{
+ class ThickLinkViewModel : BaseViewModel
+ {
+ public ThickLinkViewModel()
+ {
+ Title = "Custom link";
+ Info = "Creating your own custom links is very easy!";
+
+ _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
+
+ DiagramViewModel = new DiagramViewModel();
+ DiagramViewModel.PageSizeType = PageSizeType.Custom;
+ DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
+
+ DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" };
+ DiagramViewModel.DirectAddItemCommand.Execute(node1);
+
+ DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" };
+ DiagramViewModel.DirectAddItemCommand.Execute(node2);
+
+ DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" };
+ DiagramViewModel.DirectAddItemCommand.Execute(node3);
+
+ ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
+ connector1.ColorViewModel.LineWidth = 6;
+ connector1.ColorViewModel.LineColor.BrushType = BrushType.LinearGradientBrush;
+ connector1.ColorViewModel.LineColor.GradientStop = new ObservableCollection();
+ connector1.ColorViewModel.LineColor.GradientStop.Add(new GradientStop(System.Windows.Media.Colors.Red, 0));
+ connector1.ColorViewModel.LineColor.GradientStop.Add(new GradientStop(System.Windows.Media.Colors.Gray, 1));
+ DiagramViewModel.DirectAddItemCommand.Execute(connector1);
+
+ ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
+ connector2.ColorViewModel.LineWidth = 6;
+ connector2.ColorViewModel.LineColor.Color = System.Windows.Media.Colors.Blue;
+ DiagramViewModel.DirectAddItemCommand.Execute(connector2);
+
+ DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
+ }
+ }
+}
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Groups/GroupingViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Groups/GroupingViewModel.cs
new file mode 100644
index 0000000..cebd8cb
--- /dev/null
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Groups/GroupingViewModel.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows;
+
+namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
+{
+ class GroupingViewModel : BaseViewModel
+ {
+ public GroupingViewModel()
+ {
+ Title = "Simple";
+ Info = "A simple example of AIStudio.Wpf.DiagramDesigner.";
+
+ _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
+
+ DiagramViewModel = new DiagramViewModel();
+ DiagramViewModel.PageSizeType = PageSizeType.Custom;
+ DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
+
+ DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" };
+ DiagramViewModel.DirectAddItemCommand.Execute(node1);
+
+ DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 300, Top = 300, Text = "2" };
+ DiagramViewModel.DirectAddItemCommand.Execute(node2);
+
+ DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" };
+ DiagramViewModel.DirectAddItemCommand.Execute(node3);
+
+ ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
+ DiagramViewModel.DirectAddItemCommand.Execute(connector1);
+
+ ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
+ DiagramViewModel.DirectAddItemCommand.Execute(connector2);
+
+ DiagramViewModel.GroupCommand.Execute(new List { node1, node2 });
+
+ DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
+ }
+ }
+}
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/LabelsViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/LabelsViewModel.cs
index 9dead39..546ad16 100644
--- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/LabelsViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/LabelsViewModel.cs
@@ -61,6 +61,8 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
connector1.AddLabel("(0,-20)", 50, new Point(0, -20));
connector1.AddLabel("(0,20)", -50, new Point(0, 20));
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
+
+ DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
}
}
}
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/MarkersViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/MarkersViewModel.cs
index 6efab81..ab83afd 100644
--- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/MarkersViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/MarkersViewModel.cs
@@ -78,6 +78,8 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
connector1.AddLabel("Custom");
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
+ DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
+
}
}
}
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/PathGeneratorsViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/PathGeneratorsViewModel.cs
index 22a7e5e..26f281f 100644
--- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/PathGeneratorsViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/PathGeneratorsViewModel.cs
@@ -35,6 +35,8 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
connector2.AddLabel("Smooth");
DiagramViewModel.DirectAddItemCommand.Execute(connector2);
+
+ DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
}
}
}
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/RoutersViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/RoutersViewModel.cs
index 406bb2d..e3570b8 100644
--- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/RoutersViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/RoutersViewModel.cs
@@ -35,6 +35,8 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.LeftConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
connector2.AddLabel("Orthogonal");
DiagramViewModel.DirectAddItemCommand.Execute(connector2);
+
+ DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
}
}
}
\ No newline at end of file
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/SnappingViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/SnappingViewModel.cs
index 4962f2b..5edf68a 100644
--- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/SnappingViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/SnappingViewModel.cs
@@ -17,7 +17,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
DiagramViewModel = new DiagramViewModel();
DiagramViewModel.PageSizeType = PageSizeType.Custom;
DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
- DiagramViewModel.EnableSnapping = true;
+ DiagramViewModel.DrawModeViewModel = new DrawModeViewModel() { EnableSnapping = true };
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" };
DiagramViewModel.DirectAddItemCommand.Execute(node1);
@@ -27,6 +27,8 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 300, Top = 50, Text = "3" };
DiagramViewModel.DirectAddItemCommand.Execute(node3);
+
+ DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
}
}
}
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/VerticesViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/VerticesViewModel.cs
new file mode 100644
index 0000000..7243acd
--- /dev/null
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Links/VerticesViewModel.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows;
+
+namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
+{
+ class VerticesViewModel : BaseViewModel
+ {
+ public VerticesViewModel()
+ {
+ Title = "Link Vertices";
+ Info = "Click on a link to create a vertex. Double click on a vertex to delete it. " +
+ "You can drag the vertices around.";
+
+ _service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
+
+ DiagramViewModel = new DiagramViewModel();
+ DiagramViewModel.PageSizeType = PageSizeType.Custom;
+ DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
+
+ DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 80, Text = "1" };
+ DiagramViewModel.DirectAddItemCommand.Execute(node1);
+
+ DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel() { Left = 200, Top = 350, Text = "2" };
+ DiagramViewModel.DirectAddItemCommand.Execute(node2);
+
+ DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel() { Left = 400, Top = 100, Text = "3" };
+ DiagramViewModel.DirectAddItemCommand.Execute(node3);
+
+ ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterNormal);
+ connector1.AddLabel("Content");
+ connector1.AddVertex(new Point(221, 112.5));
+ connector1.AddVertex(new Point(111, 291));
+ DiagramViewModel.DirectAddItemCommand.Execute(connector1);
+
+ ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
+ connector2.AddLabel("Content");
+ connector2.AddVertex(new Point(400, 324));
+ connector2.AddVertex(new Point(326, 180));
+ DiagramViewModel.DirectAddItemCommand.Execute(connector2);
+
+
+ DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
+ }
+ }
+}
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/LockedViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/LockedViewModel.cs
index 39dc56f..e139c22 100644
--- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/LockedViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/LockedViewModel.cs
@@ -48,6 +48,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
connector2.IsReadOnly = true;
DiagramViewModel.DirectAddItemCommand.Execute(connector2);
+ DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
}
}
}
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Nodes/SvgViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Nodes/SvgViewModel.cs
new file mode 100644
index 0000000..a8c55b8
--- /dev/null
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/Nodes/SvgViewModel.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows;
+using AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels;
+
+namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
+{
+ class SvgViewModel : BaseViewModel
+ {
+ public SvgViewModel()
+ {
+ Title = "Custom node";
+ Info = "Creating your own custom design is very easy!";
+
+ //_service.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
+
+ DiagramViewModel = new DiagramViewModel();
+ DiagramViewModel.CellHorizontalAlignment = CellHorizontalAlignment.Center;
+ DiagramViewModel.CellVerticalAlignment = CellVerticalAlignment.Center;
+ DiagramViewModel.PageSizeType = PageSizeType.Custom;
+ DiagramViewModel.PageSize = new Size(double.NaN, double.NaN);
+
+ DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel() { Left = 50, Top = 50, Text = "1" };
+ DiagramViewModel.DirectAddItemCommand.Execute(node1);
+
+ PathItemViewModel node2 = new PathItemViewModel() { Left = 300, Top = 300, Icon = "M 0 -50 L 50 -50 L 50 -10 A 1 1 0 0 0 50 10 L 50 50 L 0 50 L 0 10 A 1 1 0 0 0 0 -10 Z" };
+ DiagramViewModel.DirectAddItemCommand.Execute(node2);
+
+ PathItemViewModel node3 = new PathItemViewModel() { Left = 300, Top = 50, Icon = "M 0 -50 L 50 -50 L 50 -10 A 1 1 0 0 0 50 10 L 50 50 L 0 50 L 0 10 A 1 1 0 0 0 0 -10 Z" };
+ DiagramViewModel.DirectAddItemCommand.Execute(node3);
+
+ ConnectionViewModel connector1 = new ConnectionViewModel(node1.RightConnector, node2.TopConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
+ DiagramViewModel.DirectAddItemCommand.Execute(connector1);
+
+ ConnectionViewModel connector2 = new ConnectionViewModel(node2.BottomConnector, node3.BottomConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
+ DiagramViewModel.DirectAddItemCommand.Execute(connector2);
+
+ DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
+ }
+ }
+}
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/PerformanceViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/PerformanceViewModel.cs
index 0a0d827..33e8914 100644
--- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/PerformanceViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/PerformanceViewModel.cs
@@ -31,6 +31,8 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
}
}
+
+ DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
}
}
}
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ReconnectLinksToClosestPortsViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ReconnectLinksToClosestPortsViewModel.cs
index ffffc8d..c560025 100644
--- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ReconnectLinksToClosestPortsViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ReconnectLinksToClosestPortsViewModel.cs
@@ -35,6 +35,8 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
DiagramViewModel.DirectAddItemCommand.Execute(connector2);
ReconnectLinksCommand = new SimpleCommand(ReconnectLinks);
+
+ DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
}
public SimpleCommand ReconnectLinksCommand
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SimpleViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SimpleViewModel.cs
index 87d9e83..e79cc18 100644
--- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SimpleViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SimpleViewModel.cs
@@ -32,6 +32,8 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
DiagramViewModel.DirectAddItemCommand.Execute(connector2);
+
+ DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
}
}
}
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SnapToGridViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SnapToGridViewModel.cs
index 6ddbcc7..f7ab25d 100644
--- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SnapToGridViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SnapToGridViewModel.cs
@@ -35,6 +35,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
DiagramViewModel.DirectAddItemCommand.Execute(connector2);
+ DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
}
}
}
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ZoomViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ZoomViewModel.cs
index d5854bb..73f5c97 100644
--- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ZoomViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ZoomViewModel.cs
@@ -33,6 +33,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
ConnectionViewModel connector2 = new ConnectionViewModel(node2.RightConnector, node3.RightConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
DiagramViewModel.DirectAddItemCommand.Execute(connector2);
+ DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
}
}
}
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/ThickLinkView.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/ThickLinkView.xaml
new file mode 100644
index 0000000..1c7f390
--- /dev/null
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/ThickLinkView.xaml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/ThickLinkView.xaml.cs b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/ThickLinkView.xaml.cs
new file mode 100644
index 0000000..a4f3320
--- /dev/null
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Customization/ThickLinkView.xaml.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace AIStudio.Wpf.DiagramDesigner.Demo.Views
+{
+ ///
+ /// ThickLinkView.xaml 的交互逻辑
+ ///
+ public partial class ThickLinkView : UserControl
+ {
+ public ThickLinkView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Groups/GroupingView.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Groups/GroupingView.xaml
new file mode 100644
index 0000000..8b37306
--- /dev/null
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Groups/GroupingView.xaml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Groups/GroupingView.xaml.cs b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Groups/GroupingView.xaml.cs
new file mode 100644
index 0000000..8bd69e0
--- /dev/null
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Groups/GroupingView.xaml.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace AIStudio.Wpf.DiagramDesigner.Demo.Views
+{
+ ///
+ /// GroupingView.xaml 的交互逻辑
+ ///
+ public partial class GroupingView : UserControl
+ {
+ public GroupingView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Links/VerticesView.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Links/VerticesView.xaml
new file mode 100644
index 0000000..3ff2e5b
--- /dev/null
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Links/VerticesView.xaml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Links/VerticesView.xaml.cs b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Links/VerticesView.xaml.cs
new file mode 100644
index 0000000..e278f87
--- /dev/null
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Links/VerticesView.xaml.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace AIStudio.Wpf.DiagramDesigner.Demo.Views
+{
+ ///
+ /// VerticesView.xaml 的交互逻辑
+ ///
+ public partial class VerticesView : UserControl
+ {
+ public VerticesView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Nodes/SvgView.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Nodes/SvgView.xaml
new file mode 100644
index 0000000..e673379
--- /dev/null
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Nodes/SvgView.xaml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/Nodes/SvgView.xaml.cs b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Nodes/SvgView.xaml.cs
new file mode 100644
index 0000000..e1c991c
--- /dev/null
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/Nodes/SvgView.xaml.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace AIStudio.Wpf.DiagramDesigner.Demo.Views
+{
+ ///
+ /// SvgView.xaml 的交互逻辑
+ ///
+ public partial class SvgView : UserControl
+ {
+ public SvgView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs b/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs
index e5c9ac0..a0efb74 100644
--- a/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs
+++ b/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs
@@ -41,7 +41,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{
get
{
- if (_viewModel.DrawModeViewModel?.LineDrawMode != null)
+ if (_viewModel.DrawModeViewModel != null)
{
return _viewModel.DrawModeViewModel.LineDrawMode;
}
@@ -55,7 +55,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{
get
{
- if (_viewModel.DrawModeViewModel?.LineRouterMode != null)
+ if (_viewModel.DrawModeViewModel != null)
{
return _viewModel.DrawModeViewModel.LineRouterMode;
}
@@ -70,7 +70,14 @@ namespace AIStudio.Wpf.DiagramDesigner
{
get
{
- return _viewModel.EnableSnapping;
+ if (_viewModel.DrawModeViewModel != null)
+ {
+ return _viewModel.DrawModeViewModel.EnableSnapping;
+ }
+ else
+ {
+ return _service.DrawModeViewModel.EnableSnapping;
+ }
}
}
@@ -78,7 +85,14 @@ namespace AIStudio.Wpf.DiagramDesigner
{
get
{
- return _viewModel.SnappingRadius;
+ if (_viewModel.DrawModeViewModel != null)
+ {
+ return _viewModel.DrawModeViewModel.SnappingRadius;
+ }
+ else
+ {
+ return _service.DrawModeViewModel.SnappingRadius;
+ }
}
}
diff --git a/AIStudio.Wpf.DiagramDesigner/StyleSelectors/DesignerItemsControlItemStyleSelector.cs b/AIStudio.Wpf.DiagramDesigner/StyleSelectors/DesignerItemsControlItemStyleSelector.cs
index c19f7ec..e922031 100644
--- a/AIStudio.Wpf.DiagramDesigner/StyleSelectors/DesignerItemsControlItemStyleSelector.cs
+++ b/AIStudio.Wpf.DiagramDesigner/StyleSelectors/DesignerItemsControlItemStyleSelector.cs
@@ -49,7 +49,6 @@ namespace AIStudio.Wpf.DiagramDesigner
if (item is DesignerItemViewModelBase)
{
-
return (Style)itemsControl.FindResource("designerItemStyle");
}
diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/DrawModeViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/DrawModeViewModel.cs
index 501dc77..48a3601 100644
--- a/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/DrawModeViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/DrawModeViewModel.cs
@@ -186,5 +186,31 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
+ private bool _enableSnapping;
+ public bool EnableSnapping
+ {
+ get
+ {
+ return _enableSnapping;
+ }
+ set
+ {
+ SetProperty(ref _enableSnapping, value);
+ }
+ }
+
+ private double _snappingRadius = 50;
+ public double SnappingRadius
+ {
+ get
+ {
+ return _snappingRadius;
+ }
+ set
+ {
+ SetProperty(ref _snappingRadius, value);
+ }
+ }
+
}
}
diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/Interface/IDrawModeViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/Interface/IDrawModeViewModel.cs
index abf5772..acfbf89 100644
--- a/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/Interface/IDrawModeViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/Interface/IDrawModeViewModel.cs
@@ -25,5 +25,14 @@ namespace AIStudio.Wpf.DiagramDesigner
{
get; set;
}
+
+ bool EnableSnapping
+ {
+ get; set;
+ }
+ double SnappingRadius
+ {
+ get; set;
+ }
}
}
diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs
index 76137f5..abcbc82 100644
--- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs
@@ -53,7 +53,7 @@ namespace AIStudio.Wpf.DiagramDesigner
protected virtual void Init(FullyCreatedConnectorInfo sourceConnectorInfo, ConnectorInfoBase sinkConnectorInfo)
{
this.Root = sourceConnectorInfo.DataItem.Root;
-
+
this.ColorViewModel.FillColor.Color = Colors.Red;
if (sinkConnectorInfo is FullyCreatedConnectorInfo sink && sink.DataItem.ShowArrow == false)
{
@@ -715,10 +715,7 @@ namespace AIStudio.Wpf.DiagramDesigner
MouseButtonEventArgs mosueArg = ((EventToCommandArgs)parameter).EventArgs as MouseButtonEventArgs;
var position = mosueArg.GetPosition(((EventToCommandArgs)parameter).Sender as IInputElement);
- var vertice = new ConnectorVertexModel(this, new PointBase(position.X, position.Y));
- vertice.PropertyChanged += new WeakINPCEventHandler(ConnectorViewModel_PropertyChanged).Handler;
- Vertices.Add(vertice);
- UpdatePathGeneratorResult();
+ AddVertex(position, false);
if (!((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control))
{
@@ -726,6 +723,18 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
+ public void AddVertex(PointBase pointBase, bool absolute = true)
+ {
+ if (absolute)
+ {
+ pointBase = new PointBase(pointBase.X - Area.Left, pointBase.Y - Area.Top);
+ }
+ var vertice = new ConnectorVertexModel(this, pointBase);
+ vertice.PropertyChanged += new WeakINPCEventHandler(ConnectorViewModel_PropertyChanged).Handler;
+ Vertices.Add(vertice);
+ UpdatePathGeneratorResult();
+ }
+
protected override void ExecuteEditCommand(object param)
{
AddLabel();
diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs
index daf8d92..12bdf82 100644
--- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs
@@ -364,33 +364,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{
SetProperty(ref _cellVerticalAlignment, value);
}
- }
-
- private bool _enableSnapping;
- public bool EnableSnapping
- {
- get
- {
- return _enableSnapping;
- }
- set
- {
- SetProperty(ref _enableSnapping, value);
- }
- }
-
- private double _snappingRadius = 50;
- public double SnappingRadius
- {
- get
- {
- return _snappingRadius;
- }
- set
- {
- SetProperty(ref _snappingRadius, value);
- }
- }
+ }
private bool _isEditName;
[Browsable(false)]
@@ -786,7 +760,7 @@ namespace AIStudio.Wpf.DiagramDesigner
ClearSelectedItems();
Add(ite);
}
- else if (parameter is List items)
+ else if (parameter is IEnumerable items)
{
if (items.Select(p => AddVerify(p)).Any() != true) return;
@@ -1714,9 +1688,15 @@ namespace AIStudio.Wpf.DiagramDesigner
#region 分组
private void ExecuteGroupCommand(object parameter)
{
- var items = from item in SelectedItems.OfType()
- where item.ParentId == Guid.Empty
- select item;
+ List items;
+ if (parameter is IEnumerable para)
+ {
+ items = para.ToList();
+ }
+ else
+ {
+ items = SelectedItems.OfType().Where(p => p.ParentId == Guid.Empty).ToList();
+ }
RectangleBase rect = GetBoundingRectangle(items);
diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs
index 2d2e483..a0b3fcf 100644
--- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs
@@ -11,10 +11,21 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public GroupDesignerItemViewModel() : base()
{
- this.ClearConnectors();
+
+ }
+
+ protected override void Init()
+ {
+ base.Init();
+
this.IsHitTestVisible = false;
}
+ protected override void InitConnector()
+ {
+
+ }
+
protected override void ExecuteEditCommand(object param)
{
}
diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs
index a594274..fc613a9 100644
--- a/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs
@@ -228,14 +228,6 @@ namespace AIStudio.Wpf.DiagramDesigner
{
get; set;
}
- bool EnableSnapping
- {
- get; set;
- }
- double SnappingRadius
- {
- get; set;
- }
Size GridMarginSize
{
get; set;