完善通用数据模版选择器
This commit is contained in:
		@@ -8,7 +8,7 @@ namespace Deedy.Activity
 | 
			
		||||
{
 | 
			
		||||
    public static partial class Helper
 | 
			
		||||
    {
 | 
			
		||||
        //TODO:管理附加属性与准备方法
 | 
			
		||||
        //TODO:管理附加属性与「准备」方法
 | 
			
		||||
        public static string Help_GetAttachValue(this IActivity activity, string key)
 | 
			
		||||
        {
 | 
			
		||||
            if (activity == null || activity.ExpandoMapping == null) return string.Empty;
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,11 @@ namespace Deedy.Activity
 | 
			
		||||
            public const string InfoIcon_Info = "InfoIcon_Info";
 | 
			
		||||
            public const string InfoIcon_Warning = "InfoIcon_Warning";
 | 
			
		||||
            public const string InfoIcon_Error = "InfoIcon_Error";
 | 
			
		||||
 | 
			
		||||
            public const string ToolIcon_Delete = "ToolIcon_Delete";
 | 
			
		||||
            public const string ToolIcon_Close = "ToolIcon_Close";
 | 
			
		||||
            public const string ToolIcon_Edit = "ToolIcon_Edit";
 | 
			
		||||
            public const string ToolIcon_Save = "ToolIcon_Save";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static ComponentResourceKey? LookupResourceKey(string themeKey)
 | 
			
		||||
@@ -28,9 +33,15 @@ namespace Deedy.Activity
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static ComponentResourceKey Activity_DefaultIcon => new ComponentResourceKey(typeof(ThemeKeys), Keys.Activity_DefaultIcon);
 | 
			
		||||
 | 
			
		||||
        public static ComponentResourceKey InfoIcon_None = new ComponentResourceKey(typeof(ThemeKeys), Keys.InfoIcon_None);
 | 
			
		||||
        public static ComponentResourceKey InfoIcon_Info = new ComponentResourceKey(typeof(ThemeKeys), Keys.InfoIcon_Info);
 | 
			
		||||
        public static ComponentResourceKey InfoIcon_Warning = new ComponentResourceKey(typeof(ThemeKeys), Keys.InfoIcon_Warning);
 | 
			
		||||
        public static ComponentResourceKey InfoIcon_Error = new ComponentResourceKey(typeof(ThemeKeys), Keys.InfoIcon_Error);
 | 
			
		||||
 | 
			
		||||
        public static ComponentResourceKey ToolIcon_Delete = new ComponentResourceKey(typeof(ThemeKeys), Keys.ToolIcon_Delete);
 | 
			
		||||
        public static ComponentResourceKey ToolIcon_Close = new ComponentResourceKey(typeof(ThemeKeys), Keys.ToolIcon_Close);
 | 
			
		||||
        public static ComponentResourceKey ToolIcon_Edit = new ComponentResourceKey(typeof(ThemeKeys), Keys.ToolIcon_Edit);
 | 
			
		||||
        public static ComponentResourceKey ToolIcon_Save = new ComponentResourceKey(typeof(ThemeKeys), Keys.ToolIcon_Save);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,9 +11,15 @@ namespace Deedy.Activity
 | 
			
		||||
    public partial class ThemeResources : ResourceDictionary
 | 
			
		||||
    {
 | 
			
		||||
        public ImageSource? Activity_DefaultIcon => this[ThemeKeys.Activity_DefaultIcon] as ImageSource;
 | 
			
		||||
 | 
			
		||||
        public ImageSource? InfoIcon_None => this[ThemeKeys.InfoIcon_None] as ImageSource;
 | 
			
		||||
        public ImageSource? InfoIcon_Info => this[ThemeKeys.InfoIcon_Info] as ImageSource;
 | 
			
		||||
        public ImageSource? InfoIcon_Warning => this[ThemeKeys.InfoIcon_Warning] as ImageSource;
 | 
			
		||||
        public ImageSource? InfoIcon_Error => this[ThemeKeys.InfoIcon_Error] as ImageSource;
 | 
			
		||||
 | 
			
		||||
        public ImageSource? ToolIcon_Delete => this[ThemeKeys.ToolIcon_Delete] as ImageSource;
 | 
			
		||||
        public ImageSource? ToolIcon_Close => this[ThemeKeys.ToolIcon_Close] as ImageSource;
 | 
			
		||||
        public ImageSource? ToolIcon_Edit => this[ThemeKeys.ToolIcon_Edit] as ImageSource;
 | 
			
		||||
        public ImageSource? ToolIcon_Save => this[ThemeKeys.ToolIcon_Save] as ImageSource;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -26,14 +26,38 @@ namespace Deedy.Activity
 | 
			
		||||
        private void LoadFromSource()
 | 
			
		||||
        {
 | 
			
		||||
            if (IsLoaded || Source == null) return;
 | 
			
		||||
            //TODO:从Source中加载DataTemplate;要求DataType必须继承IActionElement接口(ActionTemplates中设置的模版高于Source中的模版)
 | 
			
		||||
            //HACK:从Source中加载DataTemplate;要求DataType必须继承IActionElement接口(ActionTemplates中设置的模版高于Source中的模版)
 | 
			
		||||
 | 
			
		||||
            //var uri = new Uri("pack://application:,,,/YourAssembly;component/Resources/Styles.xaml");
 | 
			
		||||
            //var resourceDict = (ResourceDictionary)Application.LoadComponent(uri);
 | 
			
		||||
            //this.Resources.MergedDictionaries.Add(resourceDict);
 | 
			
		||||
 | 
			
		||||
            if (Application.LoadComponent(this.Source) is ResourceDictionary resources)
 | 
			
		||||
            {
 | 
			
		||||
                foreach (var resource in resources)
 | 
			
		||||
                {
 | 
			
		||||
                    if (resource is DataTemplate dataTemplate)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (dataTemplate.DataType is Type type)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (type.IsAssignableTo(typeof(IActionElement)))
 | 
			
		||||
                                this.ActionTemplates.Add(dataTemplate);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            IsLoaded = true;
 | 
			
		||||
        }
 | 
			
		||||
        public ActionTemplateSelector() { }
 | 
			
		||||
        public override DataTemplate SelectTemplate(object item, DependencyObject container)
 | 
			
		||||
        {
 | 
			
		||||
            this.LoadFromSource();
 | 
			
		||||
            //TODO:根据类型与契约选择特定的数据模版
 | 
			
		||||
            foreach (var dataTemplate in this.ActionTemplates)
 | 
			
		||||
            {
 | 
			
		||||
                if (item.GetType().Equals(dataTemplate.DataType))
 | 
			
		||||
                    return dataTemplate;
 | 
			
		||||
            }
 | 
			
		||||
            return base.SelectTemplate(item, container);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,7 @@
 | 
			
		||||
    <DrawingImage x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:ThemeKeys},ResourceId=Activity_DefaultIcon}">
 | 
			
		||||
        <!--矢量图标定义-->
 | 
			
		||||
    </DrawingImage>
 | 
			
		||||
    
 | 
			
		||||
    <DrawingImage x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:ThemeKeys},ResourceId=InfoIcon_None}">
 | 
			
		||||
        <!--矢量图标定义-->
 | 
			
		||||
    </DrawingImage>
 | 
			
		||||
@@ -17,6 +18,18 @@
 | 
			
		||||
    <DrawingImage x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:ThemeKeys},ResourceId=InfoIcon_Error}">
 | 
			
		||||
        <!--矢量图标定义-->
 | 
			
		||||
    </DrawingImage>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <DrawingImage x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:ThemeKeys},ResourceId=ToolIcon_Delete}">
 | 
			
		||||
        <!--矢量图标定义-->
 | 
			
		||||
    </DrawingImage>
 | 
			
		||||
    <DrawingImage x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:ThemeKeys},ResourceId=ToolIcon_Close}">
 | 
			
		||||
        <!--矢量图标定义-->
 | 
			
		||||
    </DrawingImage>
 | 
			
		||||
    <DrawingImage x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:ThemeKeys},ResourceId=ToolIcon_Edit}">
 | 
			
		||||
        <!--矢量图标定义-->
 | 
			
		||||
    </DrawingImage>
 | 
			
		||||
    <DrawingImage x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:ThemeKeys},ResourceId=ToolIcon_Save}">
 | 
			
		||||
        <!--矢量图标定义-->
 | 
			
		||||
    </DrawingImage>
 | 
			
		||||
    <!-- x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:ThemeKeys},ResourceId=ResourceKey}" -->
 | 
			
		||||
</ResourceDictionary>
 | 
			
		||||
		Reference in New Issue
	
	Block a user