diff --git a/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs b/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs index 58e4c86..87ad511 100644 --- a/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs +++ b/AIStudio.Wpf.DiagramDesigner/Controls/DesignerCanvas.cs @@ -594,6 +594,8 @@ namespace AIStudio.Wpf.DiagramDesigner if (_viewModel.IsReadOnly) return; + + if (_service.DrawModeViewModel.CursorMode == CursorMode.Format) { var element = (e.OriginalSource as FrameworkElement); @@ -652,6 +654,10 @@ namespace AIStudio.Wpf.DiagramDesigner e.Handled = true; } } + else + { + this.Focus(); + } } diff --git a/AIStudio.Wpf.DiagramDesigner/Converters/ConectorOrientationConverter.cs b/AIStudio.Wpf.DiagramDesigner/Converters/ConectorOrientationConverter.cs index f42175d..8e5ef89 100644 --- a/AIStudio.Wpf.DiagramDesigner/Converters/ConectorOrientationConverter.cs +++ b/AIStudio.Wpf.DiagramDesigner/Converters/ConectorOrientationConverter.cs @@ -5,13 +5,15 @@ using System.Linq; using System.Text; using System.Windows; using System.Windows.Data; +using System.Windows.Markup; using System.Windows.Media; using System.Windows.Media.Imaging; namespace AIStudio.Wpf.DiagramDesigner { - public class ConectorOrientationConverter : IValueConverter + public class ConectorOrientationConverter : MarkupExtension, IValueConverter { + public double Parameter { get; set; } = 5; public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { @@ -19,7 +21,12 @@ namespace AIStudio.Wpf.DiagramDesigner { string str = value as string; - return -5 - (str.Length * 4); + var length = 0 - Parameter - (str.Length * 4); + return length; + } + else if (value is double) + { + return -Parameter - (double)value; } return null; } @@ -28,5 +35,13 @@ namespace AIStudio.Wpf.DiagramDesigner { throw new NotImplementedException(); } + + public override object ProvideValue(System.IServiceProvider serviceProvider) + { + return new ConectorOrientationConverter + { + Parameter = this.Parameter, + }; + } } } diff --git a/AIStudio.Wpf.DiagramDesigner/Enums/ConnectorErrorCode.cs b/AIStudio.Wpf.DiagramDesigner/Enums/ConnectorErrorCode.cs index 55aa8d9..412e5f9 100644 --- a/AIStudio.Wpf.DiagramDesigner/Enums/ConnectorErrorCode.cs +++ b/AIStudio.Wpf.DiagramDesigner/Enums/ConnectorErrorCode.cs @@ -10,6 +10,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Enums { None, ConnErr, - ValueErr + ValueErr, + ExecuteErr, } } diff --git a/AIStudio.Wpf.DiagramDesigner/Models/Serializables/Connector/LogicalConnectorInfoItem.cs b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/Connector/LogicalConnectorInfoItem.cs index ad303b2..02b4581 100644 --- a/AIStudio.Wpf.DiagramDesigner/Models/Serializables/Connector/LogicalConnectorInfoItem.cs +++ b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/Connector/LogicalConnectorInfoItem.cs @@ -23,6 +23,7 @@ namespace AIStudio.Wpf.DiagramDesigner ConnectorValueType = viewmodel.ConnectorValueType; ConnectorValue = viewmodel.ConnectorValue; ConnectorString = viewmodel.ConnectorString; + ConnectorRemark = viewmodel.ConnectorRemark; } [XmlAttribute] @@ -42,6 +43,12 @@ namespace AIStudio.Wpf.DiagramDesigner { get; set; } + + [XmlAttribute] + public string ConnectorRemark + { + get; set; + } } diff --git a/AIStudio.Wpf.DiagramDesigner/Themes/ConnectorItem.xaml b/AIStudio.Wpf.DiagramDesigner/Themes/ConnectorItem.xaml index 5da582b..6038b49 100644 --- a/AIStudio.Wpf.DiagramDesigner/Themes/ConnectorItem.xaml +++ b/AIStudio.Wpf.DiagramDesigner/Themes/ConnectorItem.xaml @@ -72,7 +72,7 @@ - + @@ -101,6 +101,23 @@ + + + + + + + + + + + + + + + + + @@ -109,8 +126,20 @@ + + + + + + + + + + + + - + @@ -138,6 +167,22 @@ + + + + + + + + + + + + + + + + diff --git a/AIStudio.Wpf.DiagramDesigner/Themes/DiagramControl.xaml b/AIStudio.Wpf.DiagramDesigner/Themes/DiagramControl.xaml index c8b9410..5e466e5 100644 --- a/AIStudio.Wpf.DiagramDesigner/Themes/DiagramControl.xaml +++ b/AIStudio.Wpf.DiagramDesigner/Themes/DiagramControl.xaml @@ -390,6 +390,12 @@ Value="{Binding MinItemHeight}" /> + + + @@ -414,7 +420,7 @@ - + + + + @@ -750,6 +762,12 @@ + + + @@ -776,11 +794,17 @@ - - + + + + + + + + diff --git a/AIStudio.Wpf.DiagramDesigner/UserControls/ConnectorContainer.xaml.cs b/AIStudio.Wpf.DiagramDesigner/UserControls/ConnectorContainer.xaml.cs index e959e21..b62c47b 100644 --- a/AIStudio.Wpf.DiagramDesigner/UserControls/ConnectorContainer.xaml.cs +++ b/AIStudio.Wpf.DiagramDesigner/UserControls/ConnectorContainer.xaml.cs @@ -66,8 +66,8 @@ namespace AIStudio.Wpf.DiagramDesigner var vm = connector.DataContext as FullyCreatedConnectorInfo; if (vm != null) { - Canvas.SetLeft(connector, vm.DataItem.ItemWidth * vm.XRatio - vm.ConnectorWidth / 2); - Canvas.SetTop(connector, vm.DataItem.ItemHeight * vm.YRatio - vm.ConnectorHeight / 2); + Canvas.SetLeft(connector, vm.DataItem.GetItemWidth() * vm.XRatio - vm.ConnectorWidth / 2); + Canvas.SetTop(connector, vm.DataItem.GetItemHeight() * vm.YRatio - vm.ConnectorHeight / 2); } } } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs index 0b992a1..ff4e74f 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs @@ -561,6 +561,8 @@ namespace AIStudio.Wpf.DiagramDesigner case nameof(DesignerItemViewModelBase.ItemWidth): case nameof(DesignerItemViewModelBase.Left): case nameof(DesignerItemViewModelBase.Top): + case nameof(DesignerItemViewModelBase.ActualItemHeight): + case nameof(DesignerItemViewModelBase.ActualItemWidth): if (IsFullConnection) { //减少触发一次画线 diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/LogicalConnectorInfo.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/LogicalConnectorInfo.cs index 74e660d..e8112df 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/LogicalConnectorInfo.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/LogicalConnectorInfo.cs @@ -41,6 +41,7 @@ namespace AIStudio.Wpf.DiagramDesigner ConnectorValue = designer.ConnectorValue; ConnectorValueType = designer.ConnectorValueType; ConnectorString = designer.ConnectorString; + ConnectorRemark = designer.ConnectorRemark; } } @@ -71,6 +72,19 @@ namespace AIStudio.Wpf.DiagramDesigner } } + private string _connectorRemark; + public string ConnectorRemark + { + get + { + return _connectorRemark; + } + set + { + SetProperty(ref _connectorRemark, value); + } + } + private ConnectorValueType _connectorValueType; public ConnectorValueType ConnectorValueType { @@ -154,7 +168,23 @@ namespace AIStudio.Wpf.DiagramDesigner { return true; } - else if (logical.ConnectorValueType <= ConnectorValueType.ValueType && this.ConnectorValueType <= ConnectorValueType.ValueType) + else if (logical.ConnectorValueType == ConnectorValueType.Int && this.ConnectorValueType == ConnectorValueType.Int) + { + return true; + } + else if (logical.ConnectorValueType == ConnectorValueType.Real && this.ConnectorValueType == ConnectorValueType.Real) + { + return true; + } + else if (logical.ConnectorValueType == ConnectorValueType.Bool && this.ConnectorValueType == ConnectorValueType.Bool) + { + return true; + } + else if (logical.ConnectorValueType == ConnectorValueType.ValueType && this.ConnectorValueType <= ConnectorValueType.ValueType) + { + return true; + } + else if (logical.ConnectorValueType <= ConnectorValueType.ValueType && this.ConnectorValueType == ConnectorValueType.ValueType) { return true; } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs index d5ed9eb..967f47e 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs @@ -1259,9 +1259,9 @@ namespace AIStudio.Wpf.DiagramDesigner item.Id = Guid.NewGuid(); } - if (item is LogicalGateItemViewModelBase logical) + if (item is LogicalGateItemViewModelBase logical && logical.OrderNumber == 0) { - logical.OrderNumber = Items.OfType().Count() + 1; + logical.OrderNumber = Items.OfType().Where(p => p.OrderNumber > 0).Count() + 1; } //if (item is BlockDesignerItemViewModel block) //{ diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableViewModelBase.cs index a0f3b0a..d9df044 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/SelectableViewModelBase.cs @@ -458,9 +458,17 @@ namespace AIStudio.Wpf.DiagramDesigner } [Browsable(true)] + private string _name; public string Name { - get; set; + get + { + return _name; + } + set + { + SetProperty(ref _name, value); + } } private string _text; diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LogicalGateItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LogicalGateItemViewModelBase.cs index fe5e6af..36f7613 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LogicalGateItemViewModelBase.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/DefaultViewModel/LogicalGateItemViewModelBase.cs @@ -360,6 +360,14 @@ namespace AIStudio.Wpf.DiagramDesigner return false; } + if (output.ErrorCode == ConnectorErrorCode.ExecuteErr) + { + input.ErrorCode = ConnectorErrorCode.ExecuteErr; + input.ErrorMessage = "无效的输入"; + input.ColorViewModel.FillColor.Color = Colors.DarkRed; + return false; + } + return true; }