From a7379e3eff09fafca3b5c5d0c1b47fa5b336d79c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8E=E6=99=BA=E7=BA=AF?= <于智纯@LODESTAR> Date: Wed, 17 Sep 2025 22:34:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E4=B9=89=E6=A8=A1=E7=89=88=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Collection/ActionTemplateCollection.cs | 31 ++++++++++++++ .../Selector/ActionTemplateSelector.cs | 40 +++++++++++++++++++ .../ViewerStyleSelector.cs | 0 .../Deedy.Activity/Themes/FlowTemplates.xaml | 4 ++ .../Deedy.Activity/Themes/FuncTemplates.xaml | 9 +++++ 5 files changed, 84 insertions(+) create mode 100644 DeedyDesigner/Deedy.Activity/Collection/ActionTemplateCollection.cs create mode 100644 DeedyDesigner/Deedy.Activity/Selector/ActionTemplateSelector.cs rename DeedyDesigner/Deedy.Activity/{Viewer => Selector}/ViewerStyleSelector.cs (100%) create mode 100644 DeedyDesigner/Deedy.Activity/Themes/FlowTemplates.xaml create mode 100644 DeedyDesigner/Deedy.Activity/Themes/FuncTemplates.xaml diff --git a/DeedyDesigner/Deedy.Activity/Collection/ActionTemplateCollection.cs b/DeedyDesigner/Deedy.Activity/Collection/ActionTemplateCollection.cs new file mode 100644 index 0000000..1350482 --- /dev/null +++ b/DeedyDesigner/Deedy.Activity/Collection/ActionTemplateCollection.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; + +namespace Deedy.Activity +{ + public class ActionTemplateCollection : ObservableCollection + { + public ActionTemplateCollection() { } + public bool TryGetTemplate(Type type, out DataTemplate template) + { + DataTemplate dataTemplate = new DataTemplate(typeof(IActionElement)); + bool result = false; + foreach (var item in this) + { + if (type.Equals(item.DataType)) + { + dataTemplate = item; + result = true; + break; + } + } + template = dataTemplate; + return result; + } + } +} diff --git a/DeedyDesigner/Deedy.Activity/Selector/ActionTemplateSelector.cs b/DeedyDesigner/Deedy.Activity/Selector/ActionTemplateSelector.cs new file mode 100644 index 0000000..ea86a83 --- /dev/null +++ b/DeedyDesigner/Deedy.Activity/Selector/ActionTemplateSelector.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Markup; + +namespace Deedy.Activity +{ + [ContentProperty("ActionTemplates")] + [Localizability(LocalizationCategory.Ignore)] + public class ActionTemplateSelector : DataTemplateSelector + { + [AllowNull] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public ActionTemplateCollection ActionTemplates { get; internal set; } = new ActionTemplateCollection(); + [AllowNull] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public Uri Source { get; set; } + + private bool IsLoaded = false; + private void LoadFromSource() + { + if (IsLoaded || Source == null) return; + //TODO:从Source中加载DataTemplate;要求DataType必须继承IActionElement接口(ActionTemplates中设置的模版高于Source中的模版) + IsLoaded = true; + } + public ActionTemplateSelector() { } + public override DataTemplate SelectTemplate(object item, DependencyObject container) + { + this.LoadFromSource(); + + return base.SelectTemplate(item, container); + } + } +} diff --git a/DeedyDesigner/Deedy.Activity/Viewer/ViewerStyleSelector.cs b/DeedyDesigner/Deedy.Activity/Selector/ViewerStyleSelector.cs similarity index 100% rename from DeedyDesigner/Deedy.Activity/Viewer/ViewerStyleSelector.cs rename to DeedyDesigner/Deedy.Activity/Selector/ViewerStyleSelector.cs diff --git a/DeedyDesigner/Deedy.Activity/Themes/FlowTemplates.xaml b/DeedyDesigner/Deedy.Activity/Themes/FlowTemplates.xaml new file mode 100644 index 0000000..825650e --- /dev/null +++ b/DeedyDesigner/Deedy.Activity/Themes/FlowTemplates.xaml @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/DeedyDesigner/Deedy.Activity/Themes/FuncTemplates.xaml b/DeedyDesigner/Deedy.Activity/Themes/FuncTemplates.xaml new file mode 100644 index 0000000..ea2888e --- /dev/null +++ b/DeedyDesigner/Deedy.Activity/Themes/FuncTemplates.xaml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file