diff --git a/AIStudio.Wpf.DiagramDesigner/Controls/DragThumb.cs b/AIStudio.Wpf.DiagramDesigner/Controls/DragThumb.cs index 3c032bc..32db98b 100644 --- a/AIStudio.Wpf.DiagramDesigner/Controls/DragThumb.cs +++ b/AIStudio.Wpf.DiagramDesigner/Controls/DragThumb.cs @@ -30,6 +30,11 @@ namespace AIStudio.Wpf.DiagramDesigner.Controls { // we only move DesignerItems designerItems = designerItem.Root.SelectedItems.ToList(); + if (designerItem is IGroupable groupable) + { + designerItems.AddRange(designerItem.Root.SelectionService.GetGroupMembers(groupable).OfType()); + } + if (designerItem is ConnectionViewModel connector) { designerItems.Add(connector.SourceConnectorInfo.DataItem); @@ -44,6 +49,8 @@ namespace AIStudio.Wpf.DiagramDesigner.Controls designerItems = new List { designerItem }; } + designerItems = designerItems.Distinct().ToList(); + foreach (DesignerItemViewModelBase item in designerItems.OfType()) { item.BeginDo = true; diff --git a/AIStudio.Wpf.DiagramDesigner/Controls/ResizeThumb.cs b/AIStudio.Wpf.DiagramDesigner/Controls/ResizeThumb.cs index 749673d..9aca585 100644 --- a/AIStudio.Wpf.DiagramDesigner/Controls/ResizeThumb.cs +++ b/AIStudio.Wpf.DiagramDesigner/Controls/ResizeThumb.cs @@ -115,7 +115,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Controls private void DragLeft(double scale, DesignerItemViewModelBase item, SelectionService selectionService) { - IEnumerable groupItems = selectionService.GetGroupMembers(item).Cast(); + IEnumerable groupItems = selectionService.GetGroupMembers(item, false).Cast(); double groupLeft = item.Left + item.ItemWidth; foreach (DesignerItemViewModelBase groupItem in groupItems) @@ -129,7 +129,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Controls private void DragTop(double scale, DesignerItemViewModelBase item, SelectionService selectionService) { - IEnumerable groupItems = selectionService.GetGroupMembers(item).Cast(); + IEnumerable groupItems = selectionService.GetGroupMembers(item, false).Cast(); double groupBottom = item.Top + item.ItemHeight; foreach (DesignerItemViewModelBase groupItem in groupItems) { @@ -142,7 +142,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Controls private void DragRight(double scale, DesignerItemViewModelBase item, SelectionService selectionService) { - IEnumerable groupItems = selectionService.GetGroupMembers(item).Cast(); + IEnumerable groupItems = selectionService.GetGroupMembers(item, false).Cast(); double groupLeft = item.Left; foreach (DesignerItemViewModelBase groupItem in groupItems) @@ -157,7 +157,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Controls private void DragBottom(double scale, DesignerItemViewModelBase item, SelectionService selectionService) { - IEnumerable groupItems = selectionService.GetGroupMembers(item).Cast(); + IEnumerable groupItems = selectionService.GetGroupMembers(item, false).Cast(); double groupTop = item.Top; foreach (DesignerItemViewModelBase groupItem in groupItems) { diff --git a/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml b/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml index 50afb99..648f27b 100644 --- a/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml +++ b/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml @@ -415,6 +415,13 @@ + + + + + + + diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs index f6db73e..56b7c61 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs @@ -315,6 +315,24 @@ namespace AIStudio.Wpf.DiagramDesigner public bool ShowArrow { get; set; } = true; + public bool ShowResized + { + get; set; + } + + private bool alwayForResized; + public bool AlwayForResized + { + get + { + return alwayForResized; + } + set + { + SetProperty(ref alwayForResized, value); + } + } + private bool enabledForConnection = true; public bool EnabledForConnection { diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/SelectionService.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/SelectionService.cs index 39c961b..a8638a8 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/SelectionService.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/SelectionService.cs @@ -48,7 +48,7 @@ namespace AIStudio.Wpf.DiagramDesigner } } - internal List GetGroupMembers(IGroupable item) + internal List GetGroupMembers(IGroupable item, bool withchildren=true) { IEnumerable list = DiagramViewModel.Items.OfType(); IGroupable rootItem = GetRoot(list, item); @@ -56,7 +56,18 @@ namespace AIStudio.Wpf.DiagramDesigner { return new List(); } - return GetGroupMembers(list, rootItem); + + if (rootItem.IsGroup)//分组状态下,获取全部成员 + { + return GetGroupMembers(list, rootItem); + } + else + { + if (withchildren) + return GetGroupMembers(list, item);//普通的Parent关系,获取其Children + else + return new List() { item }; + } } internal IGroupable GetGroupRoot(IGroupable item) @@ -98,5 +109,7 @@ namespace AIStudio.Wpf.DiagramDesigner return groupMembers; } + + } } diff --git a/AIStudio.Wpf.Mind/ViewModels/MindDiagramViewModel.cs b/AIStudio.Wpf.Mind/ViewModels/MindDiagramViewModel.cs index ca436f7..7049ae9 100644 --- a/AIStudio.Wpf.Mind/ViewModels/MindDiagramViewModel.cs +++ b/AIStudio.Wpf.Mind/ViewModels/MindDiagramViewModel.cs @@ -172,7 +172,7 @@ namespace AIStudio.Wpf.Mind.ViewModels public MindDiagramViewModel() { - MindNode level1node = new MindNode(this) { Left = 200, Top = 200, Text = "思维导图" }; + MindNode level1node = new MindNode(this) { Root = this, Id = Guid.NewGuid(), Left = 200, Top = 200, Text = "思维导图" }; level1node.InitLayout(true); Items.Add(level1node); level1node.IsSelected = true; diff --git a/AIStudio.Wpf.Mind/ViewModels/MindNode.cs b/AIStudio.Wpf.Mind/ViewModels/MindNode.cs index c1ff252..d372acc 100644 --- a/AIStudio.Wpf.Mind/ViewModels/MindNode.cs +++ b/AIStudio.Wpf.Mind/ViewModels/MindNode.cs @@ -54,6 +54,7 @@ namespace AIStudio.Wpf.Mind.ViewModels base.Init(root); EnabledForConnection = false; + AlwayForResized = true; AddChildCommand = (Root as IMindDiagramViewModel)?.AddChildCommand; AddParentCommand = (Root as IMindDiagramViewModel)?.AddParentCommand; @@ -100,22 +101,6 @@ namespace AIStudio.Wpf.Mind.ViewModels return mindNodeModel; } - public override void AddToSelection(bool selected) - { - if (NodeLevel == 0) - { - base.AddToSelection(selected); - } - else - { - - foreach (SelectableDesignerItemViewModelBase item in Root.SelectedItems.ToList()) - item.IsSelected = false; - - this.IsSelected= true; - } - } - #region 属性 public IMindLayout MindLayout { @@ -389,11 +374,14 @@ namespace AIStudio.Wpf.Mind.ViewModels this.Children.Add(item); } item.Parent = this; + item.ParentId = this.Id; item.InitLayout(true); ConnectionViewModel connector = MindLayout?.GetOrSetConnectionViewModel(this, item); Root?.DirectAddItemCommand.Execute(new SelectableDesignerItemViewModelBase[] { item, connector }); connector.ZIndex = -1; + connector.IsSelected = false; + item.IsSelected = false; this.IsSelected = true; } @@ -450,14 +438,9 @@ namespace AIStudio.Wpf.Mind.ViewModels { if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs) { - if (NodeLevel == 0) - { - //LayoutUpdated(); - } - else + if (NodeLevel > 0 && IsSelected) { UpdateOffsetX((double)valuePropertyChangedEventArgs.OldValue, (double)valuePropertyChangedEventArgs.NewValue); - //LayoutUpdated(); } } break; @@ -466,14 +449,9 @@ namespace AIStudio.Wpf.Mind.ViewModels { if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs) { - if (NodeLevel == 0) - { - //LayoutUpdated(); - } - else + if (NodeLevel > 0 && IsSelected) { UpdateOffsetY((double)valuePropertyChangedEventArgs.OldValue, (double)valuePropertyChangedEventArgs.NewValue); - //LayoutUpdated(); } } break; @@ -487,6 +465,14 @@ namespace AIStudio.Wpf.Mind.ViewModels } } + public override void AddToSelection(bool selected) + { + foreach (SelectableDesignerItemViewModelBase item in Root.SelectedItems.ToList()) + item.IsSelected = false; + + Root.SelectedItems.Clear(); + IsSelected = selected; + } #region 布局相关 public MindNode GetLevel1Node() {