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