完善通用数据模版选择器

This commit is contained in:
zengwenjie
2025-09-24 17:49:14 +08:00
parent 6bdb41e8b5
commit 14a493c3b0
5 changed files with 58 additions and 4 deletions

View File

@@ -8,7 +8,7 @@ namespace Deedy.Activity
{ {
public static partial class Helper public static partial class Helper
{ {
//TODO管理附加属性与准备方法 //TODO管理附加属性与准备方法
public static string Help_GetAttachValue(this IActivity activity, string key) public static string Help_GetAttachValue(this IActivity activity, string key)
{ {
if (activity == null || activity.ExpandoMapping == null) return string.Empty; if (activity == null || activity.ExpandoMapping == null) return string.Empty;

View File

@@ -18,6 +18,11 @@ namespace Deedy.Activity
public const string InfoIcon_Info = "InfoIcon_Info"; public const string InfoIcon_Info = "InfoIcon_Info";
public const string InfoIcon_Warning = "InfoIcon_Warning"; public const string InfoIcon_Warning = "InfoIcon_Warning";
public const string InfoIcon_Error = "InfoIcon_Error"; 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) 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 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_None = new ComponentResourceKey(typeof(ThemeKeys), Keys.InfoIcon_None);
public static ComponentResourceKey InfoIcon_Info = new ComponentResourceKey(typeof(ThemeKeys), Keys.InfoIcon_Info); 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_Warning = new ComponentResourceKey(typeof(ThemeKeys), Keys.InfoIcon_Warning);
public static ComponentResourceKey InfoIcon_Error = new ComponentResourceKey(typeof(ThemeKeys), Keys.InfoIcon_Error); 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);
} }
} }

View File

@@ -11,9 +11,15 @@ namespace Deedy.Activity
public partial class ThemeResources : ResourceDictionary public partial class ThemeResources : ResourceDictionary
{ {
public ImageSource? Activity_DefaultIcon => this[ThemeKeys.Activity_DefaultIcon] as ImageSource; public ImageSource? Activity_DefaultIcon => this[ThemeKeys.Activity_DefaultIcon] as ImageSource;
public ImageSource? InfoIcon_None => this[ThemeKeys.InfoIcon_None] 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_Info => this[ThemeKeys.InfoIcon_Info] as ImageSource;
public ImageSource? InfoIcon_Warning => this[ThemeKeys.InfoIcon_Warning] as ImageSource; public ImageSource? InfoIcon_Warning => this[ThemeKeys.InfoIcon_Warning] as ImageSource;
public ImageSource? InfoIcon_Error => this[ThemeKeys.InfoIcon_Error] 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;
} }
} }

View File

@@ -26,14 +26,38 @@ namespace Deedy.Activity
private void LoadFromSource() private void LoadFromSource()
{ {
if (IsLoaded || Source == null) return; 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; IsLoaded = true;
} }
public ActionTemplateSelector() { } public ActionTemplateSelector() { }
public override DataTemplate SelectTemplate(object item, DependencyObject container) public override DataTemplate SelectTemplate(object item, DependencyObject container)
{ {
this.LoadFromSource(); this.LoadFromSource();
//TODO根据类型与契约选择特定的数据模版 foreach (var dataTemplate in this.ActionTemplates)
{
if (item.GetType().Equals(dataTemplate.DataType))
return dataTemplate;
}
return base.SelectTemplate(item, container); return base.SelectTemplate(item, container);
} }
} }

View File

@@ -5,6 +5,7 @@
<DrawingImage x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:ThemeKeys},ResourceId=Activity_DefaultIcon}"> <DrawingImage x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:ThemeKeys},ResourceId=Activity_DefaultIcon}">
<!--矢量图标定义--> <!--矢量图标定义-->
</DrawingImage> </DrawingImage>
<DrawingImage x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:ThemeKeys},ResourceId=InfoIcon_None}"> <DrawingImage x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:ThemeKeys},ResourceId=InfoIcon_None}">
<!--矢量图标定义--> <!--矢量图标定义-->
</DrawingImage> </DrawingImage>
@@ -17,6 +18,18 @@
<DrawingImage x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:ThemeKeys},ResourceId=InfoIcon_Error}"> <DrawingImage x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:ThemeKeys},ResourceId=InfoIcon_Error}">
<!--矢量图标定义--> <!--矢量图标定义-->
</DrawingImage> </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}" --> <!-- x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:ThemeKeys},ResourceId=ResourceKey}" -->
</ResourceDictionary> </ResourceDictionary>