diff --git a/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml b/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml index ecc2606..eeec5c6 100644 --- a/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml +++ b/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml @@ -1693,10 +1693,10 @@ IsLauncherVisible="True"> - + - diff --git a/AIStudio.Wpf.DiagramDesigner/Adorners/RubberbandAdorner.cs b/AIStudio.Wpf.DiagramDesigner/Adorners/RubberbandAdorner.cs index 939f39e..4c7bb3d 100644 --- a/AIStudio.Wpf.DiagramDesigner/Adorners/RubberbandAdorner.cs +++ b/AIStudio.Wpf.DiagramDesigner/Adorners/RubberbandAdorner.cs @@ -142,14 +142,16 @@ namespace AIStudio.Wpf.DiagramDesigner if (rubberBand.Contains(itemBounds)) { //item.IsSelected = true; - vm.SelectionService.AddToSelection(item); + //vm.SelectionService.AddToSelection(item); + item.AddToSelection(true, false); } else { if (!(Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))) { //item.IsSelected = false; - vm.SelectionService.RemoveFromSelection(item); + //vm.SelectionService.RemoveFromSelection(item); + item.RemoveFromSelection(); } } } diff --git a/AIStudio.Wpf.DiagramDesigner/AttachedProperties/SelectionProps.cs b/AIStudio.Wpf.DiagramDesigner/AttachedProperties/SelectionProps.cs index 25d424d..b858c52 100644 --- a/AIStudio.Wpf.DiagramDesigner/AttachedProperties/SelectionProps.cs +++ b/AIStudio.Wpf.DiagramDesigner/AttachedProperties/SelectionProps.cs @@ -7,7 +7,7 @@ using System.Windows.Input; namespace AIStudio.Wpf.DiagramDesigner { - public static class SelectionProps + public static class SelectionProps { #region EnabledForSelection @@ -51,20 +51,23 @@ namespace AIStudio.Wpf.DiagramDesigner { if ((Keyboard.Modifiers & (ModifierKeys.Shift)) != ModifierKeys.None) { - selectable.IsSelected = !selectable.IsSelected; + //selectable.IsSelected = !selectable.IsSelected; + selectable.AddToSelection(!selectable.IsSelected, false); } if ((Keyboard.Modifiers & (ModifierKeys.Control)) != ModifierKeys.None) { - selectable.IsSelected = !selectable.IsSelected; + //selectable.IsSelected = !selectable.IsSelected; + selectable.AddToSelection(!selectable.IsSelected, false); } } else if (!selectable.IsSelected) { - selectable.AddToSelection(true); + + selectable.AddToSelection(true, true); } } - } + } } } } diff --git a/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs b/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs index 6160427..6f4fbaf 100644 --- a/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs +++ b/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs @@ -387,7 +387,8 @@ namespace AIStudio.Wpf.DiagramDesigner SourceConnector = new Connector() { Content = new PartCreatedConnectorInfo(currentPoint.X, currentPoint.Y), Tag = "虚拟的连接点" }; } } - else if (_service.DrawModeViewModel.SharpDrawModeSelected || _service.DrawModeViewModel.DrawingDrawModeSelected) + else if (_service.DrawModeViewModel.SharpDrawModeSelected || + (_service.DrawModeViewModel.DrawingDrawModeSelected && _service.DrawModeViewModel.DrawingDrawMode != DrawMode.Select)) { // create rubberband adorner AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(this); diff --git a/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml b/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml index 182bd69..b7726cc 100644 --- a/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml +++ b/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml @@ -484,6 +484,9 @@ + + + diff --git a/AIStudio.Wpf.DiagramDesigner/UserControls/TextControl.xaml.cs b/AIStudio.Wpf.DiagramDesigner/UserControls/TextControl.xaml.cs index 65e5171..d3ef8f7 100644 --- a/AIStudio.Wpf.DiagramDesigner/UserControls/TextControl.xaml.cs +++ b/AIStudio.Wpf.DiagramDesigner/UserControls/TextControl.xaml.cs @@ -120,14 +120,7 @@ namespace AIStudio.Wpf.DiagramDesigner } base.OnPreviewKeyDown(e); } - - protected override void OnLostFocus(RoutedEventArgs e) - { - if (this.DataContext is ISelectable selectable) - { - selectable.IsSelected = false; - } - } + } public class ControlAttachProperty diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs index ab203fe..7e20d28 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs @@ -523,7 +523,7 @@ namespace AIStudio.Wpf.DiagramDesigner case nameof(IsSelected): if (IsSelected == false) { - Labels.FirstOrDefault()?.AddToSelection(false); + Labels.FirstOrDefault()?.AddToSelection(false, true); } break; case nameof(RouterMode): diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorLabelModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorLabelModel.cs index 36f4fc1..a3f3234 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorLabelModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/ConnectorLabelModel.cs @@ -169,15 +169,20 @@ namespace AIStudio.Wpf.DiagramDesigner Offset += new VectorBase(0, newvalue - oldvalue); } - public override void AddToSelection(bool selected) + public override void AddToSelection(bool selected, bool clearother) { - foreach (var item in Connector.Labels.ToList()) - item.IsSelected = false; - - if (selected == true) + if (clearother) { - IsSelected = true; + foreach (var item in Connector.Labels.ToList()) + { + if (item != this) + { + item.IsSelected = false; + } + } } + + IsSelected = selected; } protected override void ClearText() diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs index ba8c770..e8b1fd5 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs @@ -1181,7 +1181,7 @@ namespace AIStudio.Wpf.DiagramDesigner { foreach (var item in this.SelectedItems.ToList()) { - item.IsSelected = false; + item.RemoveFromSelection(); } } @@ -2498,7 +2498,7 @@ namespace AIStudio.Wpf.DiagramDesigner item.ParentId = groupItem.Id; groupItem.Resize(); ClearSelectedItems(); - SelectionService.AddToSelection(groupItem); + groupItem.AddToSelection(true, true); }, () => { Remove(groupItem); diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableDesignerItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableDesignerItemViewModelBase.cs index 0c93b49..53ad056 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableDesignerItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableDesignerItemViewModelBase.cs @@ -153,23 +153,34 @@ namespace AIStudio.Wpf.DiagramDesigner { foreach (var designerItemViewModelBase in Root.SelectedItems.ToList()) { - designerItemViewModelBase.ClearSelected(); + designerItemViewModelBase.RemoveFromSelection(); } } IsSelected = select; } - public override void AddToSelection(bool selected) + public override void AddToSelection(bool selected, bool clearother) { - foreach (SelectableDesignerItemViewModelBase item in Root.SelectedItems.ToList()) - item.IsSelected = false; + if (clearother == true) + { + foreach (SelectableDesignerItemViewModelBase item in Root.SelectedItems.ToList()) + { + if (item != this) + { + item.RemoveFromSelection(); + } + } + } - Root.SelectedItems.Clear(); if (selected == true) { Root.SelectionService.AddToSelection(this); } + else + { + Root.SelectionService.RemoveFromSelection(this); + } } protected virtual void ExecuteEditCommand(object param) diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableViewModelBase.cs index 716930e..49fefb9 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableViewModelBase.cs @@ -72,7 +72,7 @@ namespace AIStudio.Wpf.DiagramDesigner } protected virtual void Init(IDiagramViewModel root, bool initNew) - { + { Root = root; if (Root?.ColorViewModel != null) @@ -124,7 +124,7 @@ namespace AIStudio.Wpf.DiagramDesigner protected virtual void InitNew() { - + } protected virtual void LoadDesignerItemViewModel(SelectableItemBase designerbase) @@ -144,7 +144,7 @@ namespace AIStudio.Wpf.DiagramDesigner public bool IsLoaded { - get;set; + get; set; } public bool IsInternalChanged @@ -185,10 +185,18 @@ namespace AIStudio.Wpf.DiagramDesigner get; set; } - public bool DisableSelected + private bool _disableSelected; + public bool SelectedDisable { - get;set; - } + get + { + return _disableSelected; + } + set + { + SetProperty(ref _disableSelected, value); + } + } private bool _isSelected; [Browsable(false)] @@ -197,7 +205,7 @@ namespace AIStudio.Wpf.DiagramDesigner { get { - if (DisableSelected == true) + if (SelectedDisable == true) { return false; } @@ -316,10 +324,6 @@ namespace AIStudio.Wpf.DiagramDesigner { return false; } - if (DisableSelected == true) - { - return false; - } return _isHitTestVisible; } @@ -424,7 +428,7 @@ namespace AIStudio.Wpf.DiagramDesigner [Browsable(true)] public string Name { - get;set; + get; set; } private string _text; @@ -462,12 +466,12 @@ namespace AIStudio.Wpf.DiagramDesigner } - public virtual void ClearSelected() + public virtual void RemoveFromSelection() { - _isSelected = false; + IsSelected = false; } - public virtual void AddToSelection(bool selected) + public virtual void AddToSelection(bool selected, bool clearother) { } @@ -496,7 +500,7 @@ namespace AIStudio.Wpf.DiagramDesigner protected void ColorViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { - if (IsLoaded == false || IsInternalChanged == true ) { return; } + if (IsLoaded == false || IsInternalChanged == true) { return; } RaisePropertyChanged(sender, e); } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DrawingDesignerItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DrawingDesignerItemViewModelBase.cs index d7977bc..5b81aeb 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DrawingDesignerItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DrawingViewModel/Erasable/DrawingDesignerItemViewModelBase.cs @@ -25,7 +25,6 @@ namespace AIStudio.Wpf.DiagramDesigner DrawMode = drawMode; Points = new List { startPoint }; Erasable = erasable; - DisableSelected = Erasable; if (Erasable) { if (Root?.DrawModeViewModel != null) @@ -75,7 +74,7 @@ namespace AIStudio.Wpf.DiagramDesigner //this.Geometry.Transform = Transform.Parse(designer.Matrix.ToString()); this.Points = designer.Points; this.DrawMode = designer.DrawMode; - this.DisableSelected = Erasable; + this.SelectedDisable = Erasable; } } @@ -93,8 +92,6 @@ namespace AIStudio.Wpf.DiagramDesigner { if (IsFinish) { - UpdateLocation(); - if (Geometry != null) { if (Geometry.Transform is TransformGroup transformGroup) @@ -104,14 +101,16 @@ namespace AIStudio.Wpf.DiagramDesigner transformGroup.Children.Add(new TranslateTransform(0 - Geometry.Bounds.Left, 0 - Geometry.Bounds.Top)); } else - Geometry.Transform = new TranslateTransform(0 - Left, 0 - Top); + Geometry.Transform = new TranslateTransform(0 - Geometry.Bounds.Left, 0 - Geometry.Bounds.Top); if (Erasable) { var aPen = new Pen(ColorViewModel.LineColor.ToBrush(), ColorViewModel.LineWidth); aPen.DashStyle = new DashStyle(StrokeDashArray.Dash[(int)ColorViewModel.LineDashStyle], 1); Geometry = Geometry.GetWidenedPathGeometry(aPen); //可擦除,需要把Geometry转成几何图像,所以不能有填充色 + } + UpdateLocation(); } } return true; @@ -180,10 +179,38 @@ namespace AIStudio.Wpf.DiagramDesigner public void UpdateLocation() { - ItemWidth = Geometry.Bounds.Width + ColorViewModel.LineWidth * 2; - ItemHeight = Geometry.Bounds.Height + ColorViewModel.LineWidth * 2; - Left = Geometry.Bounds.Left; - Top = Geometry.Bounds.Top; + if (Erasable) + { + ItemWidth = Geometry.Bounds.Width - ColorViewModel.LineWidth * 0.5; + ItemHeight = Geometry.Bounds.Height - ColorViewModel.LineWidth * 0.5; + Left = Points[0].X; + Top = Points[0].Y; + } + else + { + ItemWidth = Geometry.Bounds.Width; + ItemHeight = Geometry.Bounds.Height; + Left = Points[0].X; + Top = Points[0].Y; + } + } + + public override void RemoveFromSelection() + { + if (Erasable == true) + { + this.SelectedDisable = true; + } + base.RemoveFromSelection(); + } + + public override void AddToSelection(bool selected, bool clearother) + { + if (selected == true && _service.DrawModeViewModel.DrawingDrawMode == DrawMode.Select) + { + this.SelectedDisable = false; + } + base.AddToSelection(selected, clearother); } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/ISelectable.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/ISelectable.cs index cd7401c..2b298a7 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/ISelectable.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/ISelectable.cs @@ -34,7 +34,7 @@ namespace AIStudio.Wpf.DiagramDesigner get; set; } - void AddToSelection(bool selected); + void AddToSelection(bool selected, bool clearother); event PropertyChangedEventHandler PropertyChanged; } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/SelectionService.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/SelectionService.cs index a8638a8..7ddf190 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/SelectionService.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/SelectionService.cs @@ -31,7 +31,7 @@ namespace AIStudio.Wpf.DiagramDesigner } } - internal void RemoveFromSelection(ISelectable item) + public void RemoveFromSelection(ISelectable item) { if (item is IGroupable) { diff --git a/Extensions/AIStudio.Wpf.Mind/ViewModels/MindNode.cs b/Extensions/AIStudio.Wpf.Mind/ViewModels/MindNode.cs index 96ee8ef..39fe706 100644 --- a/Extensions/AIStudio.Wpf.Mind/ViewModels/MindNode.cs +++ b/Extensions/AIStudio.Wpf.Mind/ViewModels/MindNode.cs @@ -737,10 +737,18 @@ namespace AIStudio.Wpf.Mind.ViewModels } - public override void AddToSelection(bool selected) + public override void AddToSelection(bool selected, bool clearother) { - foreach (SelectableDesignerItemViewModelBase item in Root.SelectedItems.ToList()) - item.IsSelected = false; + if (clearother) + { + foreach (SelectableDesignerItemViewModelBase item in Root.SelectedItems.ToList()) + { + if (item != this) + { + item.IsSelected = false; + } + } + } Root.SelectedItems.Clear(); IsSelected = selected; diff --git a/Extensions/AIStudio.Wpf.Script/AIStudio.Wpf.Script_kj103wj1_wpftmp.csproj b/Extensions/AIStudio.Wpf.Script/AIStudio.Wpf.Script_kj103wj1_wpftmp.csproj new file mode 100644 index 0000000..abd163d --- /dev/null +++ b/Extensions/AIStudio.Wpf.Script/AIStudio.Wpf.Script_kj103wj1_wpftmp.csproj @@ -0,0 +1,276 @@ + + + AIStudio.Wpf.Script + obj\Debug\ + obj\ + F:\aistudio.-wpf.-diagram\Extensions\AIStudio.Wpf.Script\obj\ + <_TargetAssemblyProjectName>AIStudio.Wpf.Script + + + + true + AIStudio.Wpf.Controls + akwkevin + https://gitee.com/akwkevin + A.png + + + 1.0.6 + 一个Wpf的脚本生成模块 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Extensions/AIStudio.Wpf.Script/AIStudio.Wpf.Script_q11gptxd_wpftmp.csproj b/Extensions/AIStudio.Wpf.Script/AIStudio.Wpf.Script_q11gptxd_wpftmp.csproj new file mode 100644 index 0000000..186a2f4 --- /dev/null +++ b/Extensions/AIStudio.Wpf.Script/AIStudio.Wpf.Script_q11gptxd_wpftmp.csproj @@ -0,0 +1,268 @@ + + + AIStudio.Wpf.Script + obj\Debug\ + obj\ + F:\aistudio.-wpf.-diagram\Extensions\AIStudio.Wpf.Script\obj\ + <_TargetAssemblyProjectName>AIStudio.Wpf.Script + + + + true + AIStudio.Wpf.Controls + akwkevin + https://gitee.com/akwkevin + A.png + + + 1.0.6 + 一个Wpf的脚本生成模块 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file