mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-04-26 19:23:24 +08:00
mind 有点样子了
This commit is contained in:
@@ -1,24 +1,25 @@
|
||||
using System;
|
||||
using System.Windows;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace AIStudio.Wpf.DiagramDesigner.Converters
|
||||
{
|
||||
public class IntToBoolConverter : IValueConverter
|
||||
public class IntToVisibilityConverter : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
||||
{
|
||||
if (object.Equals(value, 0d))
|
||||
return false;
|
||||
if (value == null || object.Equals(value, 0))
|
||||
return Visibility.Collapsed;
|
||||
else
|
||||
return true;
|
||||
return Visibility.Visible;
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
||||
{
|
||||
if (object.Equals(value, false))
|
||||
return 0d;
|
||||
if (object.Equals(value, Visibility.Collapsed))
|
||||
return 0;
|
||||
else
|
||||
return 1d;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace AIStudio.Wpf.DiagramDesigner.Converters
|
||||
{
|
||||
public class IntToBoolConverter : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
||||
{
|
||||
if (object.Equals(value, 0d))
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
||||
{
|
||||
if (object.Equals(value, false))
|
||||
return 0d;
|
||||
else
|
||||
return 1d;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -76,6 +76,8 @@ namespace AIStudio.Wpf.DiagramDesigner.Geometrys
|
||||
|
||||
public SizeBase Add(double value) => new SizeBase(Width + value, Height + value);
|
||||
|
||||
public SizeBase Add(double width, double height) => new SizeBase(Width + width, Height + height);
|
||||
|
||||
//public bool Equals(Size size) => size != null && Width == size.Width && Height == size.Height;
|
||||
|
||||
//public override string ToString() => $"Size(width={Width}, height={Height})";
|
||||
|
||||
@@ -6,7 +6,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
public static partial class PathGenerators
|
||||
{
|
||||
private const double _margin = 125;
|
||||
|
||||
|
||||
public static PathGeneratorResult Smooth(IDiagramViewModel _, ConnectionViewModel link, PointBase[] route, PointBase source, PointBase target)
|
||||
{
|
||||
@@ -74,17 +74,39 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
if (sourceOrientation == ConnectorOrientation.None)//按照线条的四象限来处理。
|
||||
{
|
||||
var slope = (route[1].Y - route[0].Y) / (route[1].X - route[0].X);
|
||||
if (Math.Abs(slope) < link.SmoothAutoSlope)
|
||||
{
|
||||
if (route[1].X > route[0].X)
|
||||
{
|
||||
sourceOrientation = ConnectorOrientation.Right;
|
||||
}
|
||||
else
|
||||
{
|
||||
sourceOrientation = ConnectorOrientation.Left;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (route[1].Y > route[0].Y)//Y轴方向是反的
|
||||
{
|
||||
sourceOrientation = ConnectorOrientation.Bottom;
|
||||
}
|
||||
else
|
||||
{
|
||||
sourceOrientation = ConnectorOrientation.Top;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
var curvePointA = GetCurvePoint(route[0].X, route[0].Y, cX, cY, sourceOrientation);
|
||||
var curvePointB = GetCurvePoint(route[1].X, route[1].Y, cX, cY, link.SinkConnectorInfo?.Orientation);
|
||||
var curvePointA = GetCurvePoint(route[0].X, route[0].Y, cX, cY, link.SmoothMargin, sourceOrientation);
|
||||
var curvePointB = GetCurvePoint(route[1].X, route[1].Y, cX, cY, link.SmoothMargin, link.SinkConnectorInfo?.Orientation);
|
||||
return new[] { route[0], curvePointA, curvePointB, route[1] };
|
||||
}
|
||||
}
|
||||
|
||||
private static PointBase GetCurvePoint(double pX, double pY, double cX, double cY, ConnectorOrientation? alignment)
|
||||
private static PointBase GetCurvePoint(double pX, double pY, double cX, double cY, double smoothMargin, ConnectorOrientation? alignment)
|
||||
{
|
||||
var margin = Math.Min(_margin, Math.Pow(Math.Pow(pX - cX, 2) + Math.Pow(pY - cY, 2), .5));
|
||||
var margin = Math.Min(smoothMargin, Math.Pow(Math.Pow(pX - cX, 2) + Math.Pow(pY - cY, 2), .5));
|
||||
switch (alignment)
|
||||
{
|
||||
case ConnectorOrientation.Top: return new PointBase(pX, Math.Min(pY - margin, cY));
|
||||
|
||||
@@ -301,13 +301,15 @@
|
||||
<Setter Property="Canvas.ZIndex"
|
||||
Value="{Binding ZIndex}" />
|
||||
<Setter Property="s:SelectionProps.EnabledForSelection"
|
||||
Value="True" />
|
||||
Value="{Binding EnabledForSelection}" />
|
||||
<Setter Property="s:ItemConnectProps.EnabledForConnection"
|
||||
Value="True" />
|
||||
Value="{Binding EnabledForConnection}" />
|
||||
<Setter Property="Visibility"
|
||||
Value="{Binding Visible,Converter={StaticResource BooleanToVisibilityConverter}}"/>
|
||||
<Setter Property="Width"
|
||||
Value="{Binding ItemWidth}" />
|
||||
<Setter Property="Height"
|
||||
Value="{Binding ItemHeight}" />
|
||||
Value="{Binding ItemHeight}" />
|
||||
<Setter Property="SnapsToDevicePixels"
|
||||
Value="True" />
|
||||
<Setter Property="ContentTemplate">
|
||||
@@ -351,7 +353,7 @@
|
||||
VerticalAlignment="Stretch"
|
||||
Content="{TemplateBinding Content}" />
|
||||
|
||||
<Control x:Name="PART_Text" Margin="5" IsHitTestVisible="{Binding IsReadOnlyText,Converter={StaticResource InvertBoolConverter}}">
|
||||
<Control x:Name="PART_Text" Margin="1" IsHitTestVisible="{Binding IsReadOnlyText,Converter={StaticResource InvertBoolConverter}}">
|
||||
<Control.Style>
|
||||
<Style TargetType="Control">
|
||||
<Setter Property="Template">
|
||||
@@ -458,7 +460,9 @@
|
||||
<Setter Property="Canvas.ZIndex"
|
||||
Value="{Binding ZIndex}" />
|
||||
<Setter Property="s:SelectionProps.EnabledForSelection"
|
||||
Value="True" />
|
||||
Value="{Binding EnabledForSelection}" />
|
||||
<Setter Property="Visibility"
|
||||
Value="{Binding Visible,Converter={StaticResource BooleanToVisibilityConverter}}"/>
|
||||
<Setter Property="ContentTemplate">
|
||||
<Setter.Value>
|
||||
<DataTemplate>
|
||||
@@ -569,9 +573,11 @@
|
||||
<Setter Property="Canvas.ZIndex"
|
||||
Value="{Binding ZIndex}" />
|
||||
<Setter Property="s:SelectionProps.EnabledForSelection"
|
||||
Value="True" />
|
||||
Value="{Binding EnabledForSelection}" />
|
||||
<Setter Property="s:ItemConnectProps.EnabledForConnection"
|
||||
Value="True" />
|
||||
Value="{Binding EnabledForConnection}" />
|
||||
<Setter Property="Visibility"
|
||||
Value="{Binding Visible,Converter={StaticResource BooleanToVisibilityConverter}}"/>
|
||||
<Setter Property="Width"
|
||||
Value="{Binding ItemWidth}" />
|
||||
<Setter Property="Height"
|
||||
@@ -647,9 +653,11 @@
|
||||
<Setter Property="Canvas.ZIndex"
|
||||
Value="{Binding ZIndex}" />
|
||||
<Setter Property="s:SelectionProps.EnabledForSelection"
|
||||
Value="True" />
|
||||
Value="{Binding EnabledForSelection}" />
|
||||
<Setter Property="s:ItemConnectProps.EnabledForConnection"
|
||||
Value="True" />
|
||||
Value="{Binding EnabledForConnection}" />
|
||||
<Setter Property="Visibility"
|
||||
Value="{Binding Visible,Converter={StaticResource BooleanToVisibilityConverter}}"/>
|
||||
<Setter Property="Width"
|
||||
Value="{Binding ItemWidth}" />
|
||||
<Setter Property="Height"
|
||||
@@ -726,7 +734,9 @@
|
||||
<Setter Property="Canvas.ZIndex"
|
||||
Value="{Binding ZIndex}" />
|
||||
<Setter Property="s:SelectionProps.EnabledForSelection"
|
||||
Value="True" />
|
||||
Value="{Binding EnabledForSelection}" />
|
||||
<Setter Property="Visibility"
|
||||
Value="{Binding Visible,Converter={StaticResource BooleanToVisibilityConverter}}"/>
|
||||
<Setter Property="Width"
|
||||
Value="{Binding ItemWidth}" />
|
||||
<Setter Property="Height"
|
||||
@@ -770,9 +780,11 @@
|
||||
<Setter Property="Canvas.ZIndex"
|
||||
Value="{Binding ZIndex}" />
|
||||
<Setter Property="s:SelectionProps.EnabledForSelection"
|
||||
Value="True" />
|
||||
Value="{Binding EnabledForSelection}" />
|
||||
<Setter Property="s:ItemConnectProps.EnabledForConnection"
|
||||
Value="True" />
|
||||
Value="{Binding EnabledForConnection}" />
|
||||
<Setter Property="Visibility"
|
||||
Value="{Binding Visible,Converter={StaticResource BooleanToVisibilityConverter}}"/>
|
||||
<Setter Property="Width"
|
||||
Value="{Binding ItemWidth}" />
|
||||
<Setter Property="Height"
|
||||
|
||||
@@ -174,6 +174,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
if (SetProperty(ref _sizeStyle, value))
|
||||
{
|
||||
Width = (double)_sizeStyle;
|
||||
Height = (double)_sizeStyle;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
if (sinkConnectorInfo is FullyCreatedConnectorInfo sink && sink.DataItem.ShowArrow == false)
|
||||
{
|
||||
this.ShapeViewModel.SinkMarker = LinkMarker.None;
|
||||
this.ShapeViewModel.SinkMarker = new LinkMarker("", 10, 10, ArrowPathStyle.None, ArrowSizeStyle.Middle);
|
||||
}
|
||||
this.ColorViewModel.PropertyChanged += ConnectorViewModel_PropertyChanged;
|
||||
this.ShapeViewModel.PropertyChanged += ConnectorViewModel_PropertyChanged;
|
||||
@@ -398,6 +398,10 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
RaisePropertyChanged(nameof(IsFullConnection));
|
||||
}
|
||||
|
||||
public double SmoothMargin { get; set; } = 125;
|
||||
|
||||
public double SmoothAutoSlope { get; set; } = 1;
|
||||
|
||||
public bool IsPortless => SourceConnectorInfo.IsPortless || SinkConnectorInfoFully?.IsPortless == true;
|
||||
#endregion
|
||||
|
||||
@@ -445,13 +449,13 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
break;
|
||||
case nameof(SourceConnectorInfo):
|
||||
SourceA = PointHelper.GetPointForConnector(SourceConnectorInfo);
|
||||
(SourceConnectorInfo.DataItem as INotifyPropertyChanged).PropertyChanged += new WeakINPCEventHandler(ConnectorViewModel_PropertyChanged).Handler;
|
||||
SourceConnectorInfo.DataItem.PropertyChanged += new WeakINPCEventHandler(ConnectorViewModel_PropertyChanged).Handler;
|
||||
break;
|
||||
case nameof(SinkConnectorInfo):
|
||||
SourceB = SinkConnectorInfo.Position;
|
||||
if (SinkConnectorInfo is FullyCreatedConnectorInfo)
|
||||
{
|
||||
(((FullyCreatedConnectorInfo)SinkConnectorInfo).DataItem as INotifyPropertyChanged).PropertyChanged += new WeakINPCEventHandler(ConnectorViewModel_PropertyChanged).Handler;
|
||||
SinkConnectorInfoFully.DataItem.PropertyChanged += new WeakINPCEventHandler(ConnectorViewModel_PropertyChanged).Handler;
|
||||
}
|
||||
break;
|
||||
case nameof(IsSelected):
|
||||
|
||||
@@ -304,6 +304,32 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
public bool ShowArrow { get; set; } = true;
|
||||
|
||||
private bool enabledForConnection = true;
|
||||
public bool EnabledForConnection
|
||||
{
|
||||
get
|
||||
{
|
||||
return enabledForConnection;
|
||||
}
|
||||
set
|
||||
{
|
||||
SetProperty(ref enabledForConnection, value);
|
||||
}
|
||||
}
|
||||
|
||||
private bool enabledForSelection = true;
|
||||
public bool EnabledForSelection
|
||||
{
|
||||
get
|
||||
{
|
||||
return enabledForSelection;
|
||||
}
|
||||
set
|
||||
{
|
||||
SetProperty(ref enabledForSelection, value);
|
||||
}
|
||||
}
|
||||
|
||||
private double _left;
|
||||
[CanDo]
|
||||
public double Left
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.ComponentModel;
|
||||
@@ -742,7 +743,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
#endregion
|
||||
|
||||
private DoCommandManager DoCommandManager = new DoCommandManager();
|
||||
private DoCommandManager DoCommandManager = new DoCommandManager();
|
||||
|
||||
public event DiagramEventHandler Event;
|
||||
|
||||
@@ -899,7 +900,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
//加入ReDo
|
||||
DoCommandManager.DoNewCommand(sender.ToString() + e.PropertyName, () => Do(sender, e.PropertyName, valuePropertyChangedEventArgs.NewValue), () => UnDo(sender, e.PropertyName, valuePropertyChangedEventArgs.OldValue), null, false);
|
||||
|
||||
|
||||
Event?.Invoke(sender, new DiagramEventArgs(valuePropertyChangedEventArgs.PropertyName, valuePropertyChangedEventArgs.NewValue, valuePropertyChangedEventArgs.OldValue, selectable?.Id));
|
||||
}
|
||||
}
|
||||
@@ -992,7 +993,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
Items.Remove(ite);
|
||||
});
|
||||
}
|
||||
else if (parameter is List<SelectableDesignerItemViewModelBase> items)
|
||||
else if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> items)
|
||||
{
|
||||
if (items.Select(p => AddVerify(p)).Any() != true) return;
|
||||
|
||||
@@ -1005,7 +1006,10 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
},
|
||||
() => {
|
||||
items.ForEach(item => Items.Remove(item));
|
||||
foreach (var item in items)
|
||||
{
|
||||
Items.Remove(item);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1016,7 +1020,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
ite.IsSelected = false;
|
||||
Items.Remove(ite);
|
||||
}
|
||||
else if (parameter is List<SelectableDesignerItemViewModelBase> items)
|
||||
else if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> items)
|
||||
{
|
||||
foreach (var item in items)
|
||||
{
|
||||
@@ -1038,7 +1042,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
Items.Add(ite);
|
||||
});
|
||||
}
|
||||
else if (parameter is List<SelectableDesignerItemViewModelBase> items)
|
||||
else if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> items)
|
||||
{
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
() => {
|
||||
@@ -1060,8 +1064,22 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
private void ExecuteClearSelectedItemsCommand(object parameter)
|
||||
{
|
||||
ClearSelectedItems();
|
||||
IEnumerable<SelectableDesignerItemViewModelBase> selectedItems;
|
||||
if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> para)
|
||||
{
|
||||
selectedItems = para;
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>();
|
||||
}
|
||||
|
||||
foreach (var item in selectedItems)
|
||||
{
|
||||
item.IsSelected = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void ClearSelectedItems()
|
||||
{
|
||||
foreach (var item in this.Items.ToList())
|
||||
@@ -1081,7 +1099,15 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
#region 布局
|
||||
private void ExecuteAlignTopCommand(object parameter)
|
||||
{
|
||||
var selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>();
|
||||
IEnumerable<DesignerItemViewModelBase> selectedItems;
|
||||
if (parameter is IEnumerable<DesignerItemViewModelBase> para)
|
||||
{
|
||||
selectedItems = para;
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>();
|
||||
}
|
||||
var guid = Guid.NewGuid();
|
||||
|
||||
if (selectedItems.Count() > 1)
|
||||
@@ -1113,7 +1139,15 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
private void ExecuteAlignVerticalCentersCommand(object parameter)
|
||||
{
|
||||
var selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>();
|
||||
IEnumerable<DesignerItemViewModelBase> selectedItems;
|
||||
if (parameter is IEnumerable<DesignerItemViewModelBase> para)
|
||||
{
|
||||
selectedItems = para;
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>();
|
||||
}
|
||||
var guid = Guid.NewGuid();
|
||||
|
||||
if (selectedItems.Count() > 1)
|
||||
@@ -1145,7 +1179,16 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
private void ExecuteAlignBottomCommand(object parameter)
|
||||
{
|
||||
var selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>();
|
||||
IEnumerable<DesignerItemViewModelBase> selectedItems;
|
||||
if (parameter is IEnumerable<DesignerItemViewModelBase> para)
|
||||
{
|
||||
selectedItems = para;
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>();
|
||||
}
|
||||
|
||||
var guid = Guid.NewGuid();
|
||||
|
||||
if (selectedItems.Count() > 1)
|
||||
@@ -1177,7 +1220,16 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
private void ExecuteAlignLeftCommand(object parameter)
|
||||
{
|
||||
var selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>();
|
||||
IEnumerable<DesignerItemViewModelBase> selectedItems;
|
||||
if (parameter is IEnumerable<DesignerItemViewModelBase> para)
|
||||
{
|
||||
selectedItems = para;
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>();
|
||||
}
|
||||
|
||||
var guid = Guid.NewGuid();
|
||||
|
||||
if (selectedItems.Count() > 1)
|
||||
@@ -1209,7 +1261,16 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
private void ExecuteAlignHorizontalCentersCommand(object parameter)
|
||||
{
|
||||
var selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>();
|
||||
IEnumerable<DesignerItemViewModelBase> selectedItems;
|
||||
if (parameter is IEnumerable<DesignerItemViewModelBase> para)
|
||||
{
|
||||
selectedItems = para;
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>();
|
||||
}
|
||||
|
||||
var guid = Guid.NewGuid();
|
||||
|
||||
if (selectedItems.Count() > 1)
|
||||
@@ -1241,7 +1302,16 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
private void ExecuteAlignRightCommand(object parameter)
|
||||
{
|
||||
var selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>();
|
||||
IEnumerable<DesignerItemViewModelBase> selectedItems;
|
||||
if (parameter is IEnumerable<DesignerItemViewModelBase> para)
|
||||
{
|
||||
selectedItems = para;
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>();
|
||||
}
|
||||
|
||||
var guid = Guid.NewGuid();
|
||||
|
||||
if (selectedItems.Count() > 1)
|
||||
@@ -1274,7 +1344,15 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
private void ExecuteBringForwardCommand(object parameter)
|
||||
{
|
||||
List<SelectableDesignerItemViewModelBase> ordered = SelectedItems.OrderByDescending(p => p.ZIndex).ToList();
|
||||
List<SelectableDesignerItemViewModelBase> ordered;
|
||||
if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> para)
|
||||
{
|
||||
ordered = para.OrderByDescending(p => p.ZIndex).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
ordered = SelectedItems.OrderByDescending(p => p.ZIndex).ToList();
|
||||
}
|
||||
|
||||
List<SelectableDesignerItemViewModelBase> changeditems = new List<SelectableDesignerItemViewModelBase>();
|
||||
var guid = Guid.NewGuid();
|
||||
@@ -1323,7 +1401,16 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
private void ExecuteBringToFrontCommand(object parameter)
|
||||
{
|
||||
List<SelectableDesignerItemViewModelBase> selectionSorted = SelectedItems.OrderByDescending(p => p.ZIndex).ToList();
|
||||
List<SelectableDesignerItemViewModelBase> selectionSorted;
|
||||
if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> para)
|
||||
{
|
||||
selectionSorted = para.OrderByDescending(p => p.ZIndex).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
selectionSorted = SelectedItems.OrderByDescending(p => p.ZIndex).ToList();
|
||||
}
|
||||
|
||||
List<SelectableDesignerItemViewModelBase> childrenSorted = Items.OrderByDescending(p => p.ZIndex).ToList();
|
||||
|
||||
List<SelectableDesignerItemViewModelBase> changeditems = new List<SelectableDesignerItemViewModelBase>();
|
||||
@@ -1363,7 +1450,16 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
private void ExecuteSendBackwardCommand(object parameter)
|
||||
{
|
||||
List<SelectableDesignerItemViewModelBase> ordered = this.SelectedItems.OrderBy(p => p.ZIndex).ToList();
|
||||
List<SelectableDesignerItemViewModelBase> ordered;
|
||||
if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> para)
|
||||
{
|
||||
ordered = para.OrderBy(p => p.ZIndex).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
ordered = SelectedItems.OrderBy(p => p.ZIndex).ToList();
|
||||
}
|
||||
|
||||
int count = this.Items.Count;
|
||||
|
||||
List<SelectableDesignerItemViewModelBase> changeditems = new List<SelectableDesignerItemViewModelBase>();
|
||||
@@ -1412,7 +1508,16 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
private void ExecuteSendToBackCommand(object parameter)
|
||||
{
|
||||
List<SelectableDesignerItemViewModelBase> selectionSorted = SelectedItems.OrderByDescending(p => p.ZIndex).ToList();
|
||||
List<SelectableDesignerItemViewModelBase> selectionSorted;
|
||||
if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> para)
|
||||
{
|
||||
selectionSorted = para.OrderByDescending(p => p.ZIndex).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
selectionSorted = SelectedItems.OrderByDescending(p => p.ZIndex).ToList();
|
||||
}
|
||||
|
||||
List<SelectableDesignerItemViewModelBase> childrenSorted = Items.OrderByDescending(p => p.ZIndex).ToList();
|
||||
|
||||
List<SelectableDesignerItemViewModelBase> changeditems = new List<SelectableDesignerItemViewModelBase>();
|
||||
@@ -1452,10 +1557,16 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
private void ExecuteDistributeHorizontalCommand(object parameter)
|
||||
{
|
||||
var selectedItems = from item in this.SelectedItems.OfType<DesignerItemViewModelBase>()
|
||||
where item.ParentId == Guid.Empty
|
||||
orderby item.Left
|
||||
select item;
|
||||
IEnumerable<DesignerItemViewModelBase> selectedItems;
|
||||
if (parameter is IEnumerable<DesignerItemViewModelBase> para)
|
||||
{
|
||||
selectedItems = para.Where(p => p.ParentId == Guid.Empty).OrderBy(p => p.Left);
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>().Where(p => p.ParentId == Guid.Empty).OrderBy(p => p.Left);
|
||||
}
|
||||
|
||||
var guid = Guid.NewGuid();
|
||||
|
||||
if (selectedItems.Count() > 1)
|
||||
@@ -1509,10 +1620,16 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
private void ExecuteDistributeVerticalCommand(object parameter)
|
||||
{
|
||||
var selectedItems = from item in this.SelectedItems.OfType<DesignerItemViewModelBase>()
|
||||
where item.ParentId == Guid.Empty
|
||||
orderby item.Top
|
||||
select item;
|
||||
IEnumerable<DesignerItemViewModelBase> selectedItems;
|
||||
if (parameter is IEnumerable<DesignerItemViewModelBase> para)
|
||||
{
|
||||
selectedItems = para.Where(p => p.ParentId == Guid.Empty).OrderBy(p => p.Top);
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>().Where(p => p.ParentId == Guid.Empty).OrderBy(p => p.Top);
|
||||
}
|
||||
|
||||
var guid = Guid.NewGuid();
|
||||
|
||||
if (selectedItems.Count() > 1)
|
||||
@@ -1568,11 +1685,21 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
#region 复制,粘贴
|
||||
private void ExecuteCopyCommand(object parameter)
|
||||
{
|
||||
List<DesignerItemViewModelBase> selectedDesignerItems =
|
||||
SelectedItems.OfType<DesignerItemViewModelBase>().ToList();
|
||||
List<DesignerItemViewModelBase> selectedDesignerItems;
|
||||
|
||||
List<ConnectionViewModel> selectedConnections;
|
||||
|
||||
if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> para)
|
||||
{
|
||||
selectedDesignerItems = para.OfType<DesignerItemViewModelBase>().ToList();
|
||||
selectedConnections = para.OfType<ConnectionViewModel>().ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedDesignerItems = SelectedItems.OfType<DesignerItemViewModelBase>().ToList();
|
||||
selectedConnections = SelectedItems.OfType<ConnectionViewModel>().ToList();
|
||||
}
|
||||
|
||||
List<ConnectionViewModel> selectedConnections =
|
||||
SelectedItems.OfType<ConnectionViewModel>().ToList();
|
||||
|
||||
foreach (ConnectionViewModel connection in Items.OfType<ConnectionViewModel>())
|
||||
{
|
||||
@@ -1712,7 +1839,17 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
private void ExecuteDeleteCommand(object parameter)
|
||||
{
|
||||
List<SelectableDesignerItemViewModelBase> itemsToRemove = SelectedItems.OfType<SelectableDesignerItemViewModelBase>().ToList();
|
||||
List<SelectableDesignerItemViewModelBase> itemsToRemove;
|
||||
|
||||
if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> para)
|
||||
{
|
||||
itemsToRemove = para.OfType<SelectableDesignerItemViewModelBase>().ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
itemsToRemove = SelectedItems.OfType<SelectableDesignerItemViewModelBase>().ToList();
|
||||
}
|
||||
|
||||
List<SelectableDesignerItemViewModelBase> connectionsToAlsoRemove = new List<SelectableDesignerItemViewModelBase>();
|
||||
|
||||
foreach (var connector in Items.OfType<ConnectionViewModel>())
|
||||
@@ -1737,7 +1874,17 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
#region 移动
|
||||
private void ExecuteLeftMoveCommand(object parameter)
|
||||
{
|
||||
foreach (var item in SelectedItems.OfType<DesignerItemViewModelBase>())
|
||||
IEnumerable<DesignerItemViewModelBase> selectedItems;
|
||||
if (parameter is IEnumerable<DesignerItemViewModelBase> para)
|
||||
{
|
||||
selectedItems = para;
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>();
|
||||
}
|
||||
|
||||
foreach (var item in selectedItems.OfType<DesignerItemViewModelBase>())
|
||||
{
|
||||
item.Left -= 0.5;
|
||||
}
|
||||
@@ -1745,7 +1892,17 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
private void ExecuteRightMoveCommand(object parameter)
|
||||
{
|
||||
foreach (var item in SelectedItems.OfType<DesignerItemViewModelBase>())
|
||||
IEnumerable<DesignerItemViewModelBase> selectedItems;
|
||||
if (parameter is IEnumerable<DesignerItemViewModelBase> para)
|
||||
{
|
||||
selectedItems = para;
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>();
|
||||
}
|
||||
|
||||
foreach (var item in selectedItems.OfType<DesignerItemViewModelBase>())
|
||||
{
|
||||
item.Left += 0.5;
|
||||
}
|
||||
@@ -1753,7 +1910,17 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
private void ExecuteUpMoveCommand(object parameter)
|
||||
{
|
||||
foreach (var item in SelectedItems.OfType<DesignerItemViewModelBase>())
|
||||
IEnumerable<DesignerItemViewModelBase> selectedItems;
|
||||
if (parameter is IEnumerable<DesignerItemViewModelBase> para)
|
||||
{
|
||||
selectedItems = para;
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>();
|
||||
}
|
||||
|
||||
foreach (var item in selectedItems.OfType<DesignerItemViewModelBase>())
|
||||
{
|
||||
item.Top -= 0.5;
|
||||
}
|
||||
@@ -1761,7 +1928,17 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
private void ExecuteDownMoveCommand(object parameter)
|
||||
{
|
||||
foreach (var item in SelectedItems.OfType<DesignerItemViewModelBase>())
|
||||
IEnumerable<DesignerItemViewModelBase> selectedItems;
|
||||
if (parameter is IEnumerable<DesignerItemViewModelBase> para)
|
||||
{
|
||||
selectedItems = para;
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>();
|
||||
}
|
||||
|
||||
foreach (var item in selectedItems.OfType<DesignerItemViewModelBase>())
|
||||
{
|
||||
item.Top += 0.5;
|
||||
}
|
||||
@@ -1769,7 +1946,17 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
private void ExecuteCenterMoveCommand(object parameter)
|
||||
{
|
||||
foreach (var item in SelectedItems.OfType<DesignerItemViewModelBase>())
|
||||
IEnumerable<DesignerItemViewModelBase> selectedItems;
|
||||
if (parameter is IEnumerable<DesignerItemViewModelBase> para)
|
||||
{
|
||||
selectedItems = para;
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>();
|
||||
}
|
||||
|
||||
foreach (var item in selectedItems.OfType<DesignerItemViewModelBase>())
|
||||
{
|
||||
item.Left = (PageSize.Width - item.ItemWidth) / 2;
|
||||
item.Top = (PageSize.Height - item.ItemHeight) / 2;
|
||||
@@ -1780,7 +1967,6 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
List<SelectableDesignerItemViewModelBase> ordered = Items.OrderBy(p => p.ZIndex).ToList();
|
||||
|
||||
|
||||
for (int i = 0; i < ordered.Count; i++)
|
||||
{
|
||||
ordered[i].ZIndex = i;
|
||||
|
||||
@@ -166,6 +166,19 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
|
||||
private bool _visible = true;
|
||||
public bool Visible
|
||||
{
|
||||
get
|
||||
{
|
||||
return _visible;
|
||||
}
|
||||
set
|
||||
{
|
||||
SetProperty(ref _visible, value);
|
||||
}
|
||||
}
|
||||
|
||||
private int _zIndex;
|
||||
[Browsable(true)]
|
||||
[CanDo]
|
||||
|
||||
Reference in New Issue
Block a user