diff --git a/AIStudio.Wpf.DiagramDesigner/AIStudio.Wpf.DiagramDesigner.csproj b/AIStudio.Wpf.DiagramDesigner/AIStudio.Wpf.DiagramDesigner.csproj index 0868aa8..4d59dbc 100644 --- a/AIStudio.Wpf.DiagramDesigner/AIStudio.Wpf.DiagramDesigner.csproj +++ b/AIStudio.Wpf.DiagramDesigner/AIStudio.Wpf.DiagramDesigner.csproj @@ -8,7 +8,7 @@ A.png - 1.2.0 + 1.2.5 一个Wpf的Diagram控件基础库 diff --git a/AIStudio.Wpf.DiagramDesigner/Converters/ConverterValueMapToBool.cs b/AIStudio.Wpf.DiagramDesigner/Converters/ConverterValueMapToBool.cs index beb3068..9681b25 100644 --- a/AIStudio.Wpf.DiagramDesigner/Converters/ConverterValueMapToBool.cs +++ b/AIStudio.Wpf.DiagramDesigner/Converters/ConverterValueMapToBool.cs @@ -67,6 +67,10 @@ namespace AIStudio.Wpf.DiagramDesigner.Converters result = System.Convert.ToInt32(result); else if (targetType == typeof(Int16)) result = System.Convert.ToInt16(result); + else if (targetType == typeof(double)) + result = System.Convert.ToDouble(result); + else if (targetType == typeof(float)) + result = System.Convert.ToSingle(result); else if (targetType == typeof(char)) result = result.ToString().First(); } diff --git a/AIStudio.Wpf.DiagramDesigner/Properties/PublishProfiles/FolderProfile.pubxml b/AIStudio.Wpf.DiagramDesigner/Properties/PublishProfiles/FolderProfile.pubxml new file mode 100644 index 0000000..1d2540d --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner/Properties/PublishProfiles/FolderProfile.pubxml @@ -0,0 +1,13 @@ + + + + + Release + Any CPU + bin\Release\net461\publish\ + FileSystem + <_TargetId>Folder + + \ No newline at end of file diff --git a/AIStudio.Wpf.DiagramDesigner/Themes/DiagramControl.xaml b/AIStudio.Wpf.DiagramDesigner/Themes/DiagramControl.xaml index 5e466e5..848e8ce 100644 --- a/AIStudio.Wpf.DiagramDesigner/Themes/DiagramControl.xaml +++ b/AIStudio.Wpf.DiagramDesigner/Themes/DiagramControl.xaml @@ -505,13 +505,17 @@ - + + + + + @@ -802,6 +806,9 @@ + + + diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs index ff4e74f..a09c21d 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs @@ -78,6 +78,12 @@ namespace AIStudio.Wpf.DiagramDesigner AddLabelCommand = new SimpleCommand(Command_Enable, para => AddLabel()); } + protected override void InitNew() + { + base.InitNew(); + ZIndex = -1; + } + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) { base.LoadDesignerItemViewModel(designerbase); diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs index 967f47e..b086818 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs @@ -1253,15 +1253,28 @@ namespace AIStudio.Wpf.DiagramDesigner private void Add(SelectableDesignerItemViewModelBase item, bool? isSelected = true) { item.Root = this; - item.ZIndex = Items.Any() ? Items.Max(p => p.ZIndex) + 1 : 0; + if (item.ZIndex == 0) + { + item.ZIndex = Items.Any() ? Items.Max(p => p.ZIndex) + 1 : 0; + } if (item.Id == Guid.Empty) { item.Id = Guid.NewGuid(); } - if (item is LogicalGateItemViewModelBase logical && logical.OrderNumber == 0) + if (item is LogicalGateItemViewModelBase logical) { - logical.OrderNumber = Items.OfType().Where(p => p.OrderNumber > 0).Count() + 1; + if (logical.OrderNumber == 0 || Items.OfType().Any(p => p.OrderNumber == logical.OrderNumber)) + { + if (Items.OfType().Any()) + { + logical.OrderNumber = Items.OfType().OrderByDescending(p => p.OrderNumber).FirstOrDefault().OrderNumber + 1; + } + else + { + logical.OrderNumber = 1; + } + } } //if (item is BlockDesignerItemViewModel block) //{ diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LogicalGateItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LogicalGateItemViewModelBase.cs index 36f7613..ecc6b36 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LogicalGateItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LogicalGateItemViewModelBase.cs @@ -205,10 +205,10 @@ namespace AIStudio.Wpf.DiagramDesigner public virtual LogicalConnectorInfo ExecuteAddToInput(LogicalConnectorInfo connector) { - if (Input.Values.Count >= 2) - { - this.ItemHeight = this.ItemHeight * (Input.Values.Count + 1) / Input.Values.Count; - } + //if (Input.Values.Count >= 2) + //{ + // this.ItemHeight = this.ItemHeight * (Input.Values.Count + 1) / Input.Values.Count; + //} connector.Orientation = ConnectorOrientation.Left; connector.IsInnerPoint = true; connector.IsPortless = false; diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DrawingDesignerItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DrawingDesignerItemViewModelBase.cs index 8ed6180..f5cd0a8 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DrawingDesignerItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DrawingDesignerItemViewModelBase.cs @@ -84,11 +84,16 @@ namespace AIStudio.Wpf.DiagramDesigner if (designerbase is DrawingDesignerItemBase designer) { this.Erasable = designer.Erasable; - this.Geometry = PathGeometry.CreateFromGeometry(Geometry.Parse(designer.Geometry)); - if (!string.IsNullOrEmpty(designer.Matrix)) + try { - this.Geometry.Transform = Transform.Parse(designer.Matrix); + + this.Geometry = PathGeometry.CreateFromGeometry(Geometry.Parse(designer.Geometry)); + if (!string.IsNullOrEmpty(designer.Matrix)) + { + this.Geometry.Transform = Transform.Parse(designer.Matrix); + } } + catch { } this.Points = designer.Points; this.DrawMode = designer.DrawMode; this.SelectedDisable = Erasable; diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EllipseDrawingDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EllipseDrawingDesignerItemViewModel.cs index aed98ac..3845ca9 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EllipseDrawingDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/EllipseDrawingDesignerItemViewModel.cs @@ -44,7 +44,16 @@ namespace AIStudio.Wpf.DiagramDesigner base.InitNewDrawing(); } + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) + { + base.LoadDesignerItemViewModel(designerbase); + if (designerbase is DrawingDesignerItemBase designer) + { + IsFinish = true; + InitNewDrawing(); + } + } public override bool OnMouseMove(IInputElement sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/LineDrawingDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/LineDrawingDesignerItemViewModel.cs index 0a717d7..a695b1a 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/LineDrawingDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/LineDrawingDesignerItemViewModel.cs @@ -45,6 +45,17 @@ namespace AIStudio.Wpf.DiagramDesigner base.InitNewDrawing(); } + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) + { + base.LoadDesignerItemViewModel(designerbase); + + if (designerbase is DrawingDesignerItemBase designer) + { + IsFinish = true; + InitNewDrawing(); + } + } + public override bool OnMouseMove(IInputElement sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/RectangleDrawingDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/RectangleDrawingDesignerItemViewModel.cs index 867374b..ce685d5 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/RectangleDrawingDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/RectangleDrawingDesignerItemViewModel.cs @@ -44,6 +44,17 @@ namespace AIStudio.Wpf.DiagramDesigner base.InitNewDrawing(); } + protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase) + { + base.LoadDesignerItemViewModel(designerbase); + + if (designerbase is DrawingDesignerItemBase designer) + { + IsFinish = true; + InitNewDrawing(); + } + } + public override bool OnMouseMove(IInputElement sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) diff --git a/Demos/AIStudio.Wpf.DiagramDesigner.Demo/App.xaml b/Demos/AIStudio.Wpf.DiagramDesigner.Demo/App.xaml index 03783ec..d1f439b 100644 --- a/Demos/AIStudio.Wpf.DiagramDesigner.Demo/App.xaml +++ b/Demos/AIStudio.Wpf.DiagramDesigner.Demo/App.xaml @@ -65,6 +65,7 @@ + diff --git a/Demos/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SimpleViewModel.cs b/Demos/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SimpleViewModel.cs index 811dad1..28fa561 100644 --- a/Demos/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SimpleViewModel.cs +++ b/Demos/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/SimpleViewModel.cs @@ -18,13 +18,13 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels DiagramViewModel.ColorViewModel = new ColorViewModel(); DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; - DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" }; + DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50,}; DiagramViewModel.Add(node1); - DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" }; + DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300 }; DiagramViewModel.Add(node2); - DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" }; + DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50}; DiagramViewModel.Add(node3); ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);