mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-02 15:50:51 +08:00
bug优化
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Enums
|
||||
{
|
||||
None,
|
||||
ConnErr,
|
||||
ValueErr
|
||||
ValueErr,
|
||||
ExecuteErr,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
<Ellipse x:Name="innter" Fill="{Binding ColorViewModel.FillColor,Converter={StaticResource ColorBrushConverter}}" StrokeThickness="1" Stroke="{Binding ColorViewModel.LineColor,Converter={StaticResource ColorBrushConverter}}" />
|
||||
</Grid>
|
||||
|
||||
<Control x:Name="label">
|
||||
<Control x:Name="value">
|
||||
<Control.Template>
|
||||
<ControlTemplate>
|
||||
<TextBlock x:Name="txtleft" FontSize="10" RenderTransformOrigin="0.5,0.5" TextTrimming="CharacterEllipsis">
|
||||
@@ -101,6 +101,23 @@
|
||||
</Control.Template>
|
||||
</Control>
|
||||
|
||||
<Control x:Name="label">
|
||||
<Control.Template>
|
||||
<ControlTemplate>
|
||||
<TextBlock x:Name="txtRight" FontSize="10" Text="{Binding Name}" RenderTransformOrigin="0.5,0.5" TextTrimming="CharacterEllipsis">
|
||||
<TextBlock.RenderTransform>
|
||||
<TransformGroup>
|
||||
<ScaleTransform/>
|
||||
<SkewTransform/>
|
||||
<RotateTransform/>
|
||||
<TranslateTransform Y="-2" X="10"/>
|
||||
</TransformGroup>
|
||||
</TextBlock.RenderTransform>
|
||||
</TextBlock>
|
||||
</ControlTemplate>
|
||||
</Control.Template>
|
||||
</Control>
|
||||
|
||||
</Grid>
|
||||
<DataTemplate.Triggers>
|
||||
<Trigger Property="IsMouseOver" Value="True">
|
||||
@@ -109,8 +126,20 @@
|
||||
<Setter TargetName="innter" Property="Fill" Value="#f73438" />
|
||||
<Setter TargetName="innter" Property="Stroke" Value="#f73438" />
|
||||
</Trigger>
|
||||
<DataTrigger Binding="{Binding BeAttachTo}" Value="True">
|
||||
<Setter TargetName="outer" Property="Margin" Value="-6" />
|
||||
<Setter TargetName="outer" Property="Fill" Value="#f73438" />
|
||||
<Setter TargetName="innter" Property="Fill" Value="#f73438" />
|
||||
<Setter TargetName="innter" Property="Stroke" Value="#f73438" />
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding DisableAttachTo}" Value="True">
|
||||
<Setter TargetName="outer" Property="Margin" Value="-6" />
|
||||
<Setter TargetName="outer" Property="Fill" Value="Gray" />
|
||||
<Setter TargetName="innter" Property="Fill" Value="Gray" />
|
||||
<Setter TargetName="innter" Property="Stroke" Value="Gray" />
|
||||
</DataTrigger>
|
||||
<DataTrigger Value="Right" Binding="{Binding Orientation}">
|
||||
<Setter TargetName="label" Property="Template">
|
||||
<Setter TargetName="value" Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate>
|
||||
<TextBlock x:Name="txtRight" FontSize="10" RenderTransformOrigin="0.5,0.5" TextTrimming="CharacterEllipsis">
|
||||
@@ -138,6 +167,22 @@
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
<Setter TargetName="label" Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate>
|
||||
<TextBlock x:Name="txtleft" FontSize="10" Text="{Binding Name}" RenderTransformOrigin="0.5,0.5" TextTrimming="CharacterEllipsis">
|
||||
<TextBlock.RenderTransform>
|
||||
<TransformGroup>
|
||||
<ScaleTransform/>
|
||||
<SkewTransform/>
|
||||
<RotateTransform/>
|
||||
<TranslateTransform Y="-2" X="{Binding ElementName=txtleft,Path=Text,Converter={dd:ConectorOrientationConverter Parameter='10'}}"/>
|
||||
</TransformGroup>
|
||||
</TextBlock.RenderTransform>
|
||||
</TextBlock>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</DataTrigger>
|
||||
</DataTemplate.Triggers>
|
||||
</DataTemplate>
|
||||
|
||||
@@ -390,6 +390,12 @@
|
||||
Value="{Binding MinItemHeight}" />
|
||||
<Setter Property="SnapsToDevicePixels"
|
||||
Value="True" />
|
||||
<Setter Property="dd:WidthAndHeightProps.Active"
|
||||
Value="true" />
|
||||
<Setter Property="dd:WidthAndHeightProps.BoundActualWidth"
|
||||
Value="{Binding ActualItemWidth,Mode=OneWayToSource}" />
|
||||
<Setter Property="dd:WidthAndHeightProps.BoundActualHeight"
|
||||
Value="{Binding ActualItemHeight,Mode=OneWayToSource}" />
|
||||
<Setter Property="ContentTemplate">
|
||||
<Setter.Value>
|
||||
<DataTemplate>
|
||||
@@ -414,7 +420,7 @@
|
||||
<c:DragThumb x:Name="PART_DragThumb" EditClickCount="{Binding EditClickCount}" Cursor="SizeAll" />
|
||||
|
||||
<Grid RenderTransformOrigin="0.5,0.5">
|
||||
|
||||
|
||||
<!-- PART_ResizeDecorator -->
|
||||
<Control x:Name="PART_ResizeDecorator"
|
||||
Visibility="Collapsed"
|
||||
@@ -730,6 +736,12 @@
|
||||
Value="{Binding ItemHeight}" />
|
||||
<Setter Property="SnapsToDevicePixels"
|
||||
Value="True" />
|
||||
<Setter Property="dd:WidthAndHeightProps.Active"
|
||||
Value="true" />
|
||||
<Setter Property="dd:WidthAndHeightProps.BoundActualWidth"
|
||||
Value="{Binding ActualItemWidth,Mode=OneWayToSource}" />
|
||||
<Setter Property="dd:WidthAndHeightProps.BoundActualHeight"
|
||||
Value="{Binding ActualItemHeight,Mode=OneWayToSource}" />
|
||||
<Setter Property="ContentTemplate">
|
||||
<Setter.Value>
|
||||
<DataTemplate>
|
||||
@@ -750,6 +762,12 @@
|
||||
</ContextMenu>
|
||||
</Grid.ContextMenu>
|
||||
|
||||
<Border BorderThickness="{Binding BorderThickness}"
|
||||
BorderBrush="{Binding ColorViewModel.LineColor,Converter={StaticResource ColorBrushConverter}}"
|
||||
Background="{Binding ColorViewModel.FillColor,Converter={StaticResource ColorBrushConverter}}"
|
||||
CornerRadius="{Binding CornerRadius}">
|
||||
</Border>
|
||||
|
||||
<!--PART_ConnectorDecorator-->
|
||||
<dd:ConnectorContainer x:Name="PART_ConnectorContainer" Style="{StaticResource ItemsControlStyle}" ItemsSource="{Binding Connectors}" Margin="0,0,0,0">
|
||||
<dd:ConnectorContainer.ItemTemplate>
|
||||
@@ -776,11 +794,17 @@
|
||||
<DataTemplate.Triggers>
|
||||
<MultiDataTrigger>
|
||||
<MultiDataTrigger.Conditions>
|
||||
<Condition Value="True" Binding="{Binding IsSelected}"/>
|
||||
<Condition Value="{x:Static sys:Guid.Empty}" Binding="{Binding ParentId}"/>
|
||||
<Condition Binding="{Binding IsSelected}" Value="True" />
|
||||
<Condition Binding="{Binding AlwayForResized}" Value="True" />
|
||||
</MultiDataTrigger.Conditions>
|
||||
<Setter TargetName="PART_ResizeDecorator" Property="Visibility" Value="Visible"/>
|
||||
</MultiDataTrigger>
|
||||
<DataTrigger Binding="{Binding ShowResize}" Value="false">
|
||||
<Setter TargetName="PART_ResizeDecorator" Property="Visibility" Value="Collapsed"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding SelectedDisable}" Value="True">
|
||||
<Setter TargetName="selectedGrid" Property="IsHitTestVisible" Value="False" />
|
||||
</DataTrigger>
|
||||
</DataTemplate.Triggers>
|
||||
</DataTemplate>
|
||||
</Setter.Value>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
//减少触发一次画线
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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<LogicalGateItemViewModelBase>().Count() + 1;
|
||||
logical.OrderNumber = Items.OfType<LogicalGateItemViewModelBase>().Where(p => p.OrderNumber > 0).Count() + 1;
|
||||
}
|
||||
//if (item is BlockDesignerItemViewModel block)
|
||||
//{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user