功能更新

This commit is contained in:
GG Z
2026-02-12 21:29:00 +08:00
parent a9faf251be
commit b3479d1f39
342 changed files with 4671 additions and 2223 deletions

View File

@@ -0,0 +1,46 @@
using System.Globalization;
using System.Windows.Data;
namespace Melskin.Converters.Internal;
/// <summary>
/// 将颜色值转换为其对应的十六进制字符串表示形式的转换器。该类实现了IValueConverter接口用于在WPF绑定中将Color类型的对象转换为十六进制颜色代码例如#AARRGGBB格式以及执行反向操作。
/// Convert方法接受一个Color对象作为输入并返回一个包含Alpha、Red、Green和Blue分量的十六进制字符串。如果输入不是Color类型则默认返回"#FFFFFFFF",代表完全不透明的白色。
/// ConvertBack方法尝试从给定的十六进制颜色字符串创建一个Color对象。它首先检查字符串是否以'#'开始如果不是则自动添加。然后使用内置的ColorConverter来解析这个字符串。如果提供的字符串格式错误或无法解析则返回DependencyProperty.UnsetValue表示转换失败。
/// </summary>
internal class ColorToHexConverter : IValueConverter
{
public static readonly ColorToHexConverter Instance = new();
public object Convert(object? value, Type t, object? p, CultureInfo c) =>
value is Color color ? $"#{color.A:X2}{color.R:X2}{color.G:X2}{color.B:X2}".ToUpper() : "#FFFFFFFF";
public object? ConvertBack(object? value, Type t, object? p, CultureInfo c)
{
if (value is not string hexStr || string.IsNullOrWhiteSpace(hexStr))
{
return DependencyProperty.UnsetValue;
}
var processedHex = hexStr.Trim();
// 如果用户没有输入 '#',自动为他们添加
if (!processedHex.StartsWith("#"))
{
processedHex = "#" + processedHex;
}
try
{
// 使用内置的 ColorConverter它非常强大能处理各种有效格式
return ColorConverter.ConvertFromString(processedHex);
}
catch
{
// 如果转换失败(例如,格式错误),则忽略此次输入
return DependencyProperty.UnsetValue;
}
}
}