From 1e9812dd005f4f23fdb1a3d23b66b6ded2b2b8af Mon Sep 17 00:00:00 2001
From: zengwenjie <1663900244@qq.com>
Date: Fri, 19 Sep 2025 19:33:24 +0800
Subject: [PATCH] =?UTF-8?q?=E5=B7=B2=E7=BB=8F=E5=AE=8C=E6=88=90=E5=B8=A6?=
=?UTF-8?q?=E6=8E=92=E5=BA=8F=E7=BB=84=E8=A3=85=E7=BB=84=E5=90=88=E5=8A=A8?=
=?UTF-8?q?=E4=BD=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Deedy.Activity/Helpers/ActionHelper.cs | 53 +++++++++++--------
DeedyDesigner/Deedy.Activity/IElement.cs | 4 +-
2 files changed, 34 insertions(+), 23 deletions(-)
diff --git a/DeedyDesigner/Deedy.Activity/Helpers/ActionHelper.cs b/DeedyDesigner/Deedy.Activity/Helpers/ActionHelper.cs
index 49a2477..b10e8ea 100644
--- a/DeedyDesigner/Deedy.Activity/Helpers/ActionHelper.cs
+++ b/DeedyDesigner/Deedy.Activity/Helpers/ActionHelper.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
+using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
@@ -129,38 +130,48 @@ namespace Deedy.Activity
///
/// 将使用部件声明特性声明的动作部件与主体组装到一起并连接
///
- ///
+ /// 要进行组装的组合元素
public static void Help_CombineElements(this ICombinedElement combined)
{
if (combined == null) return;
if (combined.Elements == null) combined.Elements = [];
var props = combined.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.SetField);
+ SortedList sortedElements = new();
+ Dictionary properties = new();
foreach (var prop in props)
{
- if (prop.CanWrite && prop.CanRead)
- {
- if (!prop.PropertyType.IsAssignableFrom(typeof(IElement))) continue;
+ if (!prop.CanRead || !prop.CanWrite) continue;
+ if (!prop.PropertyType.IsAssignableFrom(typeof(IElement))) continue;
+ var cpd = prop.GetCustomAttribute();
+ if (cpd == null) continue;
+ var element = prop.GetValue(combined) as IElement;
+ if (element == null) continue;
- bool hasPart = false;
- foreach (var element in combined.Elements)
+ element.Help_SetAttachValue(CombinePartActionAttribute.CombinePartSign, prop.Name);
+ sortedElements.Add(cpd.InitialSort, element);
+ properties.Add(prop.Name, prop);
+ }
+ foreach (var partElement in sortedElements.Values)
+ {
+ string partSign = partElement.Help_GetAttachValue(CombinePartActionAttribute.CombinePartSign);
+ if (string.IsNullOrEmpty(partSign)) continue;
+ bool hasPart = false;
+ foreach (var element in combined.Elements)
+ {
+ if (element.Help_GetAttachValue(CombinePartActionAttribute.CombinePartSign) == partSign)
{
- if (element.Help_GetAttachValue(CombinePartActionAttribute.CombinePartSign) == prop.Name)
- {
- element.LinkTo(combined);
- prop.SetValue(combined, element);
- hasPart = true;
- break;
- }
- }
- if (!hasPart)
- {
- IElement? partElement = prop.GetValue(combined) as IElement;
- if (partElement == null) continue;
- combined.Elements.Add(partElement);
- partElement.LinkTo(combined);
- partElement.Help_SetAttachValue(CombinePartActionAttribute.CombinePartSign, prop.Name);
+ element.LinkTo(combined);
+ properties[partSign].SetValue(combined, element);
+ hasPart = true;
+ break;
}
}
+ if (!hasPart)
+ {
+ combined.Elements.Add(partElement);
+ partElement.LinkTo(combined);
+ if (partElement is IActionElement actionElement) actionElement.IsLocked = true;
+ }
}
}
///
diff --git a/DeedyDesigner/Deedy.Activity/IElement.cs b/DeedyDesigner/Deedy.Activity/IElement.cs
index d5bbc06..ea2c94e 100644
--- a/DeedyDesigner/Deedy.Activity/IElement.cs
+++ b/DeedyDesigner/Deedy.Activity/IElement.cs
@@ -76,8 +76,8 @@ namespace Deedy.Activity
combinedElement.Help_CombineElements();
this.LinkTo(element);
- if (this is IContainerElement container)
- foreach (IElement subElement in container.Elements)
+ if (this is ICombinedElement combined)
+ foreach (IElement subElement in combined.Elements)
subElement.ReadyToWorking(this);
}
public virtual IElement? Clone()