bug优化

This commit is contained in:
艾竹
2025-01-19 11:02:03 +08:00
parent 4582897817
commit ddf89e21e4
12 changed files with 160 additions and 14 deletions

View File

@@ -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();
}
}

View File

@@ -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,
};
}
}
}

View File

@@ -10,6 +10,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Enums
{
None,
ConnErr,
ValueErr
ValueErr,
ExecuteErr,
}
}

View File

@@ -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;
}
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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);
}
}
}

View File

@@ -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)
{
//减少触发一次画线

View File

@@ -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;
}

View File

@@ -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)
//{

View File

@@ -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;

View File

@@ -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;
}