diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/FlowchartViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/FlowchartViewModel.cs index 0e89210..4252a5d 100644 --- a/AIStudio.Wpf.DiagramApp/ViewModels/FlowchartViewModel.cs +++ b/AIStudio.Wpf.DiagramApp/ViewModels/FlowchartViewModel.cs @@ -78,14 +78,14 @@ namespace AIStudio.Wpf.Flowchart ConnectorViewModel connector3 = new ConnectorViewModel(decide.RightConnector, middle2.TopConnector, _service.DrawModeViewModel.LineDrawMode, _service.DrawModeViewModel.LineRouterMode); DiagramViewModel.DirectAddItemCommand.Execute(connector3); - connector3.AddText(">=3"); + connector3.AddLabel(">=3"); ConnectorViewModel connector4 = new ConnectorViewModel(middle2.BottomConnector, cobegin.TopConnector, _service.DrawModeViewModel.LineDrawMode, _service.DrawModeViewModel.LineRouterMode); DiagramViewModel.DirectAddItemCommand.Execute(connector4); ConnectorViewModel connector5 = new ConnectorViewModel(decide.BottomConnector, cobegin.TopConnector, _service.DrawModeViewModel.LineDrawMode, _service.DrawModeViewModel.LineRouterMode); DiagramViewModel.DirectAddItemCommand.Execute(connector5); - connector5.AddText("<3"); + connector5.AddLabel("<3"); ConnectorViewModel connector6 = new ConnectorViewModel(cobegin.BottomConnector, middle3.TopConnector, _service.DrawModeViewModel.LineDrawMode, _service.DrawModeViewModel.LineRouterMode); DiagramViewModel.DirectAddItemCommand.Execute(connector6); diff --git a/AIStudio.Wpf.DiagramDesigner/AttachedProperties/ConnectorStyleProps.cs b/AIStudio.Wpf.DiagramDesigner/AttachedProperties/ConnectorStyleProps.cs new file mode 100644 index 0000000..1221e2b --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner/AttachedProperties/ConnectorStyleProps.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows; + +namespace AIStudio.Wpf.DiagramDesigner +{ + public static class ConnectorStyleProps + { + public static readonly DependencyProperty StyleProperty = + DependencyProperty.RegisterAttached("Style", typeof(Style), typeof(ConnectorStyleProps), + new FrameworkPropertyMetadata(default(Style))); + + public static Style GetStyle(DependencyObject d) + { + return (Style)d.GetValue(StyleProperty); + } + + public static void SetStyle(DependencyObject d, Style value) + { + d.SetValue(StyleProperty, value); + } + + } +} diff --git a/AIStudio.Wpf.DiagramDesigner/Controls/Connector.cs b/AIStudio.Wpf.DiagramDesigner/Controls/Connector.cs index 9762412..b82b2ce 100644 --- a/AIStudio.Wpf.DiagramDesigner/Controls/Connector.cs +++ b/AIStudio.Wpf.DiagramDesigner/Controls/Connector.cs @@ -12,6 +12,7 @@ namespace AIStudio.Wpf.DiagramDesigner public class Connector : Control { + protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) { base.OnMouseLeftButtonDown(e); diff --git a/AIStudio.Wpf.DiagramDesigner/Converters/ConectorStyleConverter.cs b/AIStudio.Wpf.DiagramDesigner/Converters/ConectorStyleConverter.cs new file mode 100644 index 0000000..32d6c20 --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner/Converters/ConectorStyleConverter.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text; +using System.Windows; +using System.Windows.Data; + +namespace AIStudio.Wpf.DiagramDesigner +{ + public class ConectorStyleConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value == null) + { + if (parameter is Style style) + { + return style; + } + else if (parameter is string str) + { + return Application.Current.FindResource(str) as Style; + } + else + { + return Application.Current.FindResource("DefaultConnectorStyle") as Style; + } + } + + return value; + } + + public object ConvertBack(object value, Type targetTypes, object parameter, CultureInfo culture) + { + return DependencyProperty.UnsetValue; + } + } +} diff --git a/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml b/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml index 2ca2801..8047cc7 100644 --- a/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml +++ b/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml @@ -23,7 +23,8 @@ - + + - - - - - + + + - + - + new PointBase(Parent.Area.Left + Left + ConnectorWidth / 2, Parent.Area.Top + Top + ConnectorHeight / 2); - private bool updating = false; public void UpdatePosition(SvgPath[] paths) @@ -167,5 +164,13 @@ namespace AIStudio.Wpf.DiagramDesigner } } + private void DeleteLabel(object parameter) + { + if (parameter is ConnectorLabelModel label) + { + Parent.Labels.Remove(label); + } + } + } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorVertexModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorVertexModel.cs index 66e2ac5..ce06521 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorVertexModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorVertexModel.cs @@ -9,6 +9,8 @@ namespace AIStudio.Wpf.DiagramDesigner Parent = parent; X = position?.X ?? 0; Y = position?.Y ?? 0; + + DeleteVertexCommand = new SimpleCommand(DeleteVertex); } public ConnectorViewModel Parent @@ -26,5 +28,18 @@ namespace AIStudio.Wpf.DiagramDesigner public override PointBase MiddlePosition => new PointBase(Parent.Area.Left + Left + ConnectorWidth / 2, Parent.Area.Top + Top + ConnectorHeight / 2); + public SimpleCommand DeleteVertexCommand + { + get; set; + } + + private void DeleteVertex(object parameter) + { + if (parameter is ConnectorVertexModel vertice) + { + Parent.Vertices.Remove(vertice); + } + } + } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorViewModel.cs index 71a075c..7507db6 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectorViewModel.cs @@ -61,7 +61,7 @@ namespace AIStudio.Wpf.DiagramDesigner this.SinkConnectorInfo = sinkConnectorInfo; DeleteConnectionCommand = new SimpleCommand(DeleteConnection); AddVertexCommand = new SimpleCommand(AddVertex); - AddTextCommand = new SimpleCommand(AddText); + AddLabelCommand = new SimpleCommand(AddLabel); } protected void LoadDesignerItemViewModel(SelectableDesignerItemBase designerbase) @@ -339,7 +339,7 @@ namespace AIStudio.Wpf.DiagramDesigner get; set; } - public SimpleCommand AddTextCommand + public SimpleCommand AddLabelCommand { get; set; } @@ -643,10 +643,10 @@ namespace AIStudio.Wpf.DiagramDesigner protected override void ExecuteEditCommand(object param) { - AddText(); + AddLabel(); } - public void AddText(object text = null) + public void AddLabel(object text = null) { var label = new ConnectorLabelModel(this, text?.ToString()); label.PropertyChanged += new WeakINPCEventHandler(ConnectorViewModel_PropertyChanged).Handler; @@ -656,6 +656,8 @@ namespace AIStudio.Wpf.DiagramDesigner var paths = Labels.Count > 0 ? PathGeneratorResult.Paths.Select(p => new SvgPath(p)).ToArray() : Array.Empty(); label.UpdatePosition(paths); } + + #endregion } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs index 9988ad1..27f9c94 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DesignerItemViewModelBase.cs @@ -69,6 +69,7 @@ namespace AIStudio.Wpf.DiagramDesigner connectors.Add(new FullyCreatedConnectorInfo(this, ConnectorOrientation.Right)); } + #region 属性 public FullyCreatedConnectorInfo TopConnector { get { return (connectors != null && connectors.Count >= 1) ? connectors[0] : null; } @@ -89,6 +90,11 @@ namespace AIStudio.Wpf.DiagramDesigner get { return (connectors != null && connectors.Count >= 4) ? connectors[3] : null; } } + public Style ConnectorStyle + { + get; set; + } + public ShapeDefiner ShapeDefiner { get; @@ -348,6 +354,9 @@ namespace AIStudio.Wpf.DiagramDesigner } } + #endregion + + #region 方法 public void AddConnector(FullyCreatedConnectorInfo connector) { if (!connectors.Contains(connector)) @@ -449,5 +458,7 @@ namespace AIStudio.Wpf.DiagramDesigner } public IShape GetShape() => ShapeDefiner(this); + + #endregion } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/FullyCreatedConnectorInfo.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/FullyCreatedConnectorInfo.cs index 0e8da68..90cf796 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/FullyCreatedConnectorInfo.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/FullyCreatedConnectorInfo.cs @@ -136,6 +136,19 @@ namespace AIStudio.Wpf.DiagramDesigner } } + private Style _style; + public Style Style + { + get + { + return _style; + } + set + { + SetProperty(ref _style, value); + } + } + public SimpleCommand DeleteCommand { get; private set; diff --git a/AIStudio.Wpf.Flowchart/Models/DiagramDataExtention.cs b/AIStudio.Wpf.Flowchart/Models/DiagramDataExtention.cs index 45f54a8..b85900c 100644 --- a/AIStudio.Wpf.Flowchart/Models/DiagramDataExtention.cs +++ b/AIStudio.Wpf.Flowchart/Models/DiagramDataExtention.cs @@ -231,7 +231,7 @@ namespace AIStudio.Wpf.Flowchart.Models linkModel.ColorViewModel.LineWidth = diagramLink.Width; if (!string.IsNullOrEmpty(diagramLink.Label)) { - linkModel.AddText(diagramLink.Label); + linkModel.AddLabel(diagramLink.Label); } //线条形状与箭头待处理 //switch (diagramLink.Router)