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 (_viewModel.IsReadOnly) return;
if (_service.DrawModeViewModel.CursorMode == CursorMode.Format) if (_service.DrawModeViewModel.CursorMode == CursorMode.Format)
{ {
var element = (e.OriginalSource as FrameworkElement); var element = (e.OriginalSource as FrameworkElement);
@@ -652,6 +654,10 @@ namespace AIStudio.Wpf.DiagramDesigner
e.Handled = true; e.Handled = true;
} }
} }
else
{
this.Focus();
}
} }

View File

@@ -5,13 +5,15 @@ using System.Linq;
using System.Text; using System.Text;
using System.Windows; using System.Windows;
using System.Windows.Data; using System.Windows.Data;
using System.Windows.Markup;
using System.Windows.Media; using System.Windows.Media;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
namespace AIStudio.Wpf.DiagramDesigner 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) 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; 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; return null;
} }
@@ -28,5 +35,13 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
throw new NotImplementedException(); 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, None,
ConnErr, ConnErr,
ValueErr ValueErr,
ExecuteErr,
} }
} }

View File

@@ -23,6 +23,7 @@ namespace AIStudio.Wpf.DiagramDesigner
ConnectorValueType = viewmodel.ConnectorValueType; ConnectorValueType = viewmodel.ConnectorValueType;
ConnectorValue = viewmodel.ConnectorValue; ConnectorValue = viewmodel.ConnectorValue;
ConnectorString = viewmodel.ConnectorString; ConnectorString = viewmodel.ConnectorString;
ConnectorRemark = viewmodel.ConnectorRemark;
} }
[XmlAttribute] [XmlAttribute]
@@ -42,6 +43,12 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
get; set; 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}}" /> <Ellipse x:Name="innter" Fill="{Binding ColorViewModel.FillColor,Converter={StaticResource ColorBrushConverter}}" StrokeThickness="1" Stroke="{Binding ColorViewModel.LineColor,Converter={StaticResource ColorBrushConverter}}" />
</Grid> </Grid>
<Control x:Name="label"> <Control x:Name="value">
<Control.Template> <Control.Template>
<ControlTemplate> <ControlTemplate>
<TextBlock x:Name="txtleft" FontSize="10" RenderTransformOrigin="0.5,0.5" TextTrimming="CharacterEllipsis"> <TextBlock x:Name="txtleft" FontSize="10" RenderTransformOrigin="0.5,0.5" TextTrimming="CharacterEllipsis">
@@ -101,6 +101,23 @@
</Control.Template> </Control.Template>
</Control> </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> </Grid>
<DataTemplate.Triggers> <DataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True"> <Trigger Property="IsMouseOver" Value="True">
@@ -109,8 +126,20 @@
<Setter TargetName="innter" Property="Fill" Value="#f73438" /> <Setter TargetName="innter" Property="Fill" Value="#f73438" />
<Setter TargetName="innter" Property="Stroke" Value="#f73438" /> <Setter TargetName="innter" Property="Stroke" Value="#f73438" />
</Trigger> </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}"> <DataTrigger Value="Right" Binding="{Binding Orientation}">
<Setter TargetName="label" Property="Template"> <Setter TargetName="value" Property="Template">
<Setter.Value> <Setter.Value>
<ControlTemplate> <ControlTemplate>
<TextBlock x:Name="txtRight" FontSize="10" RenderTransformOrigin="0.5,0.5" TextTrimming="CharacterEllipsis"> <TextBlock x:Name="txtRight" FontSize="10" RenderTransformOrigin="0.5,0.5" TextTrimming="CharacterEllipsis">
@@ -138,6 +167,22 @@
</ControlTemplate> </ControlTemplate>
</Setter.Value> </Setter.Value>
</Setter> </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> </DataTrigger>
</DataTemplate.Triggers> </DataTemplate.Triggers>
</DataTemplate> </DataTemplate>

View File

@@ -390,6 +390,12 @@
Value="{Binding MinItemHeight}" /> Value="{Binding MinItemHeight}" />
<Setter Property="SnapsToDevicePixels" <Setter Property="SnapsToDevicePixels"
Value="True" /> 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 Property="ContentTemplate">
<Setter.Value> <Setter.Value>
<DataTemplate> <DataTemplate>
@@ -414,7 +420,7 @@
<c:DragThumb x:Name="PART_DragThumb" EditClickCount="{Binding EditClickCount}" Cursor="SizeAll" /> <c:DragThumb x:Name="PART_DragThumb" EditClickCount="{Binding EditClickCount}" Cursor="SizeAll" />
<Grid RenderTransformOrigin="0.5,0.5"> <Grid RenderTransformOrigin="0.5,0.5">
<!-- PART_ResizeDecorator --> <!-- PART_ResizeDecorator -->
<Control x:Name="PART_ResizeDecorator" <Control x:Name="PART_ResizeDecorator"
Visibility="Collapsed" Visibility="Collapsed"
@@ -730,6 +736,12 @@
Value="{Binding ItemHeight}" /> Value="{Binding ItemHeight}" />
<Setter Property="SnapsToDevicePixels" <Setter Property="SnapsToDevicePixels"
Value="True" /> 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 Property="ContentTemplate">
<Setter.Value> <Setter.Value>
<DataTemplate> <DataTemplate>
@@ -750,6 +762,12 @@
</ContextMenu> </ContextMenu>
</Grid.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--> <!--PART_ConnectorDecorator-->
<dd:ConnectorContainer x:Name="PART_ConnectorContainer" Style="{StaticResource ItemsControlStyle}" ItemsSource="{Binding Connectors}" Margin="0,0,0,0"> <dd:ConnectorContainer x:Name="PART_ConnectorContainer" Style="{StaticResource ItemsControlStyle}" ItemsSource="{Binding Connectors}" Margin="0,0,0,0">
<dd:ConnectorContainer.ItemTemplate> <dd:ConnectorContainer.ItemTemplate>
@@ -776,11 +794,17 @@
<DataTemplate.Triggers> <DataTemplate.Triggers>
<MultiDataTrigger> <MultiDataTrigger>
<MultiDataTrigger.Conditions> <MultiDataTrigger.Conditions>
<Condition Value="True" Binding="{Binding IsSelected}"/> <Condition Binding="{Binding IsSelected}" Value="True" />
<Condition Value="{x:Static sys:Guid.Empty}" Binding="{Binding ParentId}"/> <Condition Binding="{Binding AlwayForResized}" Value="True" />
</MultiDataTrigger.Conditions> </MultiDataTrigger.Conditions>
<Setter TargetName="PART_ResizeDecorator" Property="Visibility" Value="Visible"/> <Setter TargetName="PART_ResizeDecorator" Property="Visibility" Value="Visible"/>
</MultiDataTrigger> </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.Triggers>
</DataTemplate> </DataTemplate>
</Setter.Value> </Setter.Value>

View File

@@ -66,8 +66,8 @@ namespace AIStudio.Wpf.DiagramDesigner
var vm = connector.DataContext as FullyCreatedConnectorInfo; var vm = connector.DataContext as FullyCreatedConnectorInfo;
if (vm != null) if (vm != null)
{ {
Canvas.SetLeft(connector, vm.DataItem.ItemWidth * vm.XRatio - vm.ConnectorWidth / 2); Canvas.SetLeft(connector, vm.DataItem.GetItemWidth() * vm.XRatio - vm.ConnectorWidth / 2);
Canvas.SetTop(connector, vm.DataItem.ItemHeight * vm.YRatio - vm.ConnectorHeight / 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.ItemWidth):
case nameof(DesignerItemViewModelBase.Left): case nameof(DesignerItemViewModelBase.Left):
case nameof(DesignerItemViewModelBase.Top): case nameof(DesignerItemViewModelBase.Top):
case nameof(DesignerItemViewModelBase.ActualItemHeight):
case nameof(DesignerItemViewModelBase.ActualItemWidth):
if (IsFullConnection) if (IsFullConnection)
{ {
//减少触发一次画线 //减少触发一次画线

View File

@@ -41,6 +41,7 @@ namespace AIStudio.Wpf.DiagramDesigner
ConnectorValue = designer.ConnectorValue; ConnectorValue = designer.ConnectorValue;
ConnectorValueType = designer.ConnectorValueType; ConnectorValueType = designer.ConnectorValueType;
ConnectorString = designer.ConnectorString; 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; private ConnectorValueType _connectorValueType;
public ConnectorValueType ConnectorValueType public ConnectorValueType ConnectorValueType
{ {
@@ -154,7 +168,23 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
return true; 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; return true;
} }

View File

@@ -1259,9 +1259,9 @@ namespace AIStudio.Wpf.DiagramDesigner
item.Id = Guid.NewGuid(); 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) //if (item is BlockDesignerItemViewModel block)
//{ //{

View File

@@ -458,9 +458,17 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
[Browsable(true)] [Browsable(true)]
private string _name;
public string Name public string Name
{ {
get; set; get
{
return _name;
}
set
{
SetProperty(ref _name, value);
}
} }
private string _text; private string _text;

View File

@@ -360,6 +360,14 @@ namespace AIStudio.Wpf.DiagramDesigner
return false; return false;
} }
if (output.ErrorCode == ConnectorErrorCode.ExecuteErr)
{
input.ErrorCode = ConnectorErrorCode.ExecuteErr;
input.ErrorMessage = "无效的输入";
input.ColorViewModel.FillColor.Color = Colors.DarkRed;
return false;
}
return true; return true;
} }