This commit is contained in:
akwkevin
2025-03-23 16:23:19 +08:00
parent 4c36933b76
commit c269be1bbf
13 changed files with 95 additions and 15 deletions

View File

@@ -8,7 +8,7 @@
<PackageIcon>A.png</PackageIcon>
<PackageIconUrl />
<NeutralLanguage />
<Version>1.2.0</Version>
<Version>1.2.5</Version>
<Description>一个Wpf的Diagram控件基础库</Description>
</PropertyGroup>

View File

@@ -67,6 +67,10 @@ namespace AIStudio.Wpf.DiagramDesigner.Converters
result = System.Convert.ToInt32(result);
else if (targetType == typeof(Int16))
result = System.Convert.ToInt16(result);
else if (targetType == typeof(double))
result = System.Convert.ToDouble(result);
else if (targetType == typeof(float))
result = System.Convert.ToSingle(result);
else if (targetType == typeof(char))
result = result.ToString().First();
}

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<Configuration>Release</Configuration>
<Platform>Any CPU</Platform>
<PublishDir>bin\Release\net461\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<_TargetId>Folder</_TargetId>
</PropertyGroup>
</Project>

View File

@@ -505,13 +505,17 @@
</MultiDataTrigger>
<DataTrigger Binding="{Binding ShowResize}" Value="false">
<Setter TargetName="PART_ResizeDecorator" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</DataTrigger>
<DataTrigger Binding="{Binding Connectors.Count}" Value="0">
<Setter TargetName="PART_ConnectorDecorator" Property="Visibility" Value="Collapsed" />
</DataTrigger>
<DataTrigger Binding="{Binding IsInnerConnector}" Value="True">
<Setter TargetName="PART_ConnectorDecorator" Property="Template" Value="{StaticResource InnerConnectorDecoratorTemplate}" />
</DataTrigger>
<DataTrigger Binding="{Binding IsReadOnly}" Value="true">
<Setter TargetName="PART_ResizeDecorator" Property="Visibility" Value="Collapsed"/>
<Setter TargetName="PART_ConnectorDecorator" Property="Visibility" Value="Collapsed" />
</DataTrigger>
<DataTrigger Binding="{Binding SelectedDisable}" Value="True">
<Setter TargetName="selectedGrid" Property="IsHitTestVisible" Value="False" />
</DataTrigger>
@@ -802,6 +806,9 @@
<DataTrigger Binding="{Binding ShowResize}" Value="false">
<Setter TargetName="PART_ResizeDecorator" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsReadOnly}" Value="true">
<Setter TargetName="PART_ResizeDecorator" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding SelectedDisable}" Value="True">
<Setter TargetName="selectedGrid" Property="IsHitTestVisible" Value="False" />
</DataTrigger>

View File

@@ -78,6 +78,12 @@ namespace AIStudio.Wpf.DiagramDesigner
AddLabelCommand = new SimpleCommand(Command_Enable, para => AddLabel());
}
protected override void InitNew()
{
base.InitNew();
ZIndex = -1;
}
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(designerbase);

View File

@@ -1253,15 +1253,28 @@ namespace AIStudio.Wpf.DiagramDesigner
private void Add(SelectableDesignerItemViewModelBase item, bool? isSelected = true)
{
item.Root = this;
item.ZIndex = Items.Any() ? Items.Max(p => p.ZIndex) + 1 : 0;
if (item.ZIndex == 0)
{
item.ZIndex = Items.Any() ? Items.Max(p => p.ZIndex) + 1 : 0;
}
if (item.Id == Guid.Empty)
{
item.Id = Guid.NewGuid();
}
if (item is LogicalGateItemViewModelBase logical && logical.OrderNumber == 0)
if (item is LogicalGateItemViewModelBase logical)
{
logical.OrderNumber = Items.OfType<LogicalGateItemViewModelBase>().Where(p => p.OrderNumber > 0).Count() + 1;
if (logical.OrderNumber == 0 || Items.OfType<LogicalGateItemViewModelBase>().Any(p => p.OrderNumber == logical.OrderNumber))
{
if (Items.OfType<LogicalGateItemViewModelBase>().Any())
{
logical.OrderNumber = Items.OfType<LogicalGateItemViewModelBase>().OrderByDescending(p => p.OrderNumber).FirstOrDefault().OrderNumber + 1;
}
else
{
logical.OrderNumber = 1;
}
}
}
//if (item is BlockDesignerItemViewModel block)
//{

View File

@@ -205,10 +205,10 @@ namespace AIStudio.Wpf.DiagramDesigner
public virtual LogicalConnectorInfo ExecuteAddToInput(LogicalConnectorInfo connector)
{
if (Input.Values.Count >= 2)
{
this.ItemHeight = this.ItemHeight * (Input.Values.Count + 1) / Input.Values.Count;
}
//if (Input.Values.Count >= 2)
//{
// this.ItemHeight = this.ItemHeight * (Input.Values.Count + 1) / Input.Values.Count;
//}
connector.Orientation = ConnectorOrientation.Left;
connector.IsInnerPoint = true;
connector.IsPortless = false;

View File

@@ -84,11 +84,16 @@ namespace AIStudio.Wpf.DiagramDesigner
if (designerbase is DrawingDesignerItemBase designer)
{
this.Erasable = designer.Erasable;
this.Geometry = PathGeometry.CreateFromGeometry(Geometry.Parse(designer.Geometry));
if (!string.IsNullOrEmpty(designer.Matrix))
try
{
this.Geometry.Transform = Transform.Parse(designer.Matrix);
this.Geometry = PathGeometry.CreateFromGeometry(Geometry.Parse(designer.Geometry));
if (!string.IsNullOrEmpty(designer.Matrix))
{
this.Geometry.Transform = Transform.Parse(designer.Matrix);
}
}
catch { }
this.Points = designer.Points;
this.DrawMode = designer.DrawMode;
this.SelectedDisable = Erasable;

View File

@@ -44,7 +44,16 @@ namespace AIStudio.Wpf.DiagramDesigner
base.InitNewDrawing();
}
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is DrawingDesignerItemBase designer)
{
IsFinish = true;
InitNewDrawing();
}
}
public override bool OnMouseMove(IInputElement sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)

View File

@@ -45,6 +45,17 @@ namespace AIStudio.Wpf.DiagramDesigner
base.InitNewDrawing();
}
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is DrawingDesignerItemBase designer)
{
IsFinish = true;
InitNewDrawing();
}
}
public override bool OnMouseMove(IInputElement sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)

View File

@@ -44,6 +44,17 @@ namespace AIStudio.Wpf.DiagramDesigner
base.InitNewDrawing();
}
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is DrawingDesignerItemBase designer)
{
IsFinish = true;
InitNewDrawing();
}
}
public override bool OnMouseMove(IInputElement sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)

View File

@@ -65,6 +65,7 @@
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.Controls;component/Themes/MahApps.xaml"/>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.DiagramDesigner;component/Themes/Style.xaml" />
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.Flowchart;component/Themes/FlowNode.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>

View File

@@ -18,13 +18,13 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
DiagramViewModel.ColorViewModel = new ColorViewModel();
DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange;
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" };
DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50,};
DiagramViewModel.Add(node1);
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300, Text = "2" };
DefaultDesignerItemViewModel node2 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 300 };
DiagramViewModel.Add(node2);
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" };
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50};
DiagramViewModel.Add(node3);
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.RightConnector, node2.LeftConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);