定义日志图标资源
This commit is contained in:
@@ -23,7 +23,7 @@ namespace Deedy.Activity
|
||||
/// <summary>
|
||||
/// 用于为Action提供显示视图
|
||||
/// </summary>
|
||||
[IconKey(ThemeKeys.KEY_Activity_DefaultIcon)]
|
||||
[IconKey(ThemeKeys.Keys.Activity_DefaultIcon)]
|
||||
[TemplatePart(Name = PART_ItemsContainer, Type = typeof(ItemsControl))]
|
||||
[TemplatePart(Name = PART_TitleContainer, Type = typeof(FrameworkElement))]
|
||||
[TemplatePart(Name = PART_StateDecorator, Type = typeof(ViewerStateDecorator))]
|
||||
@@ -250,7 +250,6 @@ namespace Deedy.Activity
|
||||
if (e.NewValue is LogInfo logInfo)
|
||||
{
|
||||
this.ToolTip = logInfo.ToString();
|
||||
//TODO:更新消息显示图标
|
||||
this.LogInfos.Add(logInfo);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Media;
|
||||
@@ -9,16 +11,94 @@ using System.Windows.Shapes;
|
||||
|
||||
namespace Deedy.Activity
|
||||
{
|
||||
public class LogInfo
|
||||
public class LogInfo : INotifyPropertyChanged
|
||||
{
|
||||
private LogInfo() { }
|
||||
#region 定义属性通知事件相关方法
|
||||
public event PropertyChangedEventHandler? PropertyChanged;
|
||||
protected virtual void OnPropertyChanged([CallerMemberName, AllowNull] string propertyName = null)
|
||||
{
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||||
}
|
||||
protected virtual T GetField<T>(ref T field, [CallerMemberName, AllowNull] string propertyName = null)
|
||||
{
|
||||
T result = field;
|
||||
switch (propertyName)
|
||||
{
|
||||
//返回前的自定义逻辑
|
||||
default: break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
protected virtual bool SetField<T>(ref T field, T value, [CallerMemberName, AllowNull] string propertyName = null)
|
||||
{
|
||||
if (EqualityComparer<T>.Default.Equals(field, value)) return false;
|
||||
T _Value = value;
|
||||
switch (propertyName)
|
||||
{
|
||||
//赋值前的自定义逻辑
|
||||
default: break;
|
||||
}
|
||||
field = _Value;
|
||||
OnPropertyChanged(propertyName);
|
||||
return true;
|
||||
}
|
||||
#endregion
|
||||
public static LogInfo Empty => new("");
|
||||
|
||||
public LogInfo(string info, InfoType type = InfoType.日志) { this.Info = info; this.Type = type; }
|
||||
[AllowNull]
|
||||
public ImageSource Icon { get; set; }
|
||||
public readonly static LogInfo Empty = new();
|
||||
public override string ToString()
|
||||
protected internal ImageSource _Icon = null;
|
||||
/// <summary>
|
||||
/// 消息图标
|
||||
/// </summary>
|
||||
public ImageSource? Icon
|
||||
{
|
||||
//TODO:返回序列化后的消息
|
||||
return "";
|
||||
get { return GetField<ImageSource?>(ref _Icon); }
|
||||
private set
|
||||
{
|
||||
if (SetField<ImageSource?>(ref _Icon, value))
|
||||
{
|
||||
// 这里可以加入属性变更后的处理逻辑
|
||||
}
|
||||
}
|
||||
}
|
||||
protected internal InfoType _Type = InfoType.日志;
|
||||
/// <summary>
|
||||
/// 消息类型
|
||||
/// </summary>
|
||||
public InfoType Type
|
||||
{
|
||||
get { return GetField<InfoType>(ref _Type); }
|
||||
set
|
||||
{
|
||||
if (SetField<InfoType>(ref _Type, value))
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case InfoType.日志: this.Icon = new ThemeResources().InfoIcon_None; break;
|
||||
case InfoType.提示: this.Icon = new ThemeResources().InfoIcon_Info; break;
|
||||
case InfoType.警告: this.Icon = new ThemeResources().InfoIcon_Warning; break;
|
||||
case InfoType.错误: this.Icon = new ThemeResources().InfoIcon_Error; break;
|
||||
default: this.Icon = new ThemeResources().InfoIcon_None; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
protected internal string _Info = "";
|
||||
/// <summary>
|
||||
/// 信息内容
|
||||
/// </summary>
|
||||
public string Info
|
||||
{
|
||||
get { return GetField<string>(ref _Info); }
|
||||
set
|
||||
{
|
||||
if (SetField<string>(ref _Info, value))
|
||||
{
|
||||
// 这里可以加入属性变更后的处理逻辑
|
||||
}
|
||||
}
|
||||
}
|
||||
public override string ToString() => $"「{this.Type}\t」「{this.Info}」";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,9 +8,21 @@ namespace Deedy.Activity
|
||||
{
|
||||
public enum InfoType : int
|
||||
{
|
||||
None = 0,
|
||||
Info = 1,
|
||||
Warn = 2,
|
||||
Error = 3
|
||||
/// <summary>
|
||||
/// None
|
||||
/// </summary>
|
||||
日志 = 0,
|
||||
/// <summary>
|
||||
/// Info
|
||||
/// </summary>
|
||||
提示 = 1,
|
||||
/// <summary>
|
||||
/// Warning
|
||||
/// </summary>
|
||||
警告 = 2,
|
||||
/// <summary>
|
||||
/// Error
|
||||
/// </summary>
|
||||
错误 = 3
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,16 @@ namespace Deedy.Activity
|
||||
{
|
||||
public static class ThemeKeys
|
||||
{
|
||||
public const string KEY_Activity_DefaultIcon = "Activity_DefaultIcon";
|
||||
public static class Keys
|
||||
{
|
||||
public const string Activity_DefaultIcon = "Activity_DefaultIcon";
|
||||
|
||||
public const string InfoIcon_None = "InfoIcon_None";
|
||||
public const string InfoIcon_Info = "InfoIcon_Info";
|
||||
public const string InfoIcon_Warning = "InfoIcon_Warning";
|
||||
public const string InfoIcon_Error = "InfoIcon_Error";
|
||||
}
|
||||
|
||||
public static ComponentResourceKey? LookupResourceKey(string themeKey)
|
||||
{
|
||||
if (typeof(ThemeKeys).GetProperty(themeKey, typeof(ComponentResourceKey)) is PropertyInfo pInfo)
|
||||
@@ -18,7 +27,10 @@ namespace Deedy.Activity
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ComponentResourceKey Activity_DefaultIcon => new ComponentResourceKey(typeof(ThemeKeys), "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_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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,5 +11,9 @@ 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,18 @@
|
||||
<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>
|
||||
<DrawingImage x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:ThemeKeys},ResourceId=InfoIcon_Info}">
|
||||
<!--矢量图标定义-->
|
||||
</DrawingImage>
|
||||
<DrawingImage x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:ThemeKeys},ResourceId=InfoIcon_Warning}">
|
||||
<!--矢量图标定义-->
|
||||
</DrawingImage>
|
||||
<DrawingImage x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:ThemeKeys},ResourceId=InfoIcon_Error}">
|
||||
<!--矢量图标定义-->
|
||||
</DrawingImage>
|
||||
|
||||
<!-- x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:ThemeKeys},ResourceId=ResourceKey}" -->
|
||||
</ResourceDictionary>
|
||||
Reference in New Issue
Block a user