2025-08-20 12:10:13 +08:00
|
|
|
|
using System.Globalization;
|
2025-08-12 23:08:54 +08:00
|
|
|
|
using System.Windows.Data;
|
|
|
|
|
|
|
2026-01-02 17:30:41 +08:00
|
|
|
|
namespace Melskin.Converters.Internal;
|
2025-08-12 23:08:54 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 该类实现了IValueConverter接口,用于将Alpha透明度值(0-255)与百分比字符串(0%-100%)之间进行转换。
|
|
|
|
|
|
/// 在Convert方法中,接受一个0到255之间的整数值作为输入,并将其转换为相应的百分比字符串表示形式。
|
|
|
|
|
|
/// 而在ConvertBack方法中,则执行相反的操作:接收一个百分比字符串,并尝试将其解析回0至255范围内的整数。
|
|
|
|
|
|
/// 若输入非预期格式或超出合理范围时,转换器将采取适当措施以确保输出结果的有效性。
|
|
|
|
|
|
/// </summary>
|
2025-08-20 12:10:13 +08:00
|
|
|
|
internal class AlphaToPercentConverter : IValueConverter
|
2025-08-12 23:08:54 +08:00
|
|
|
|
{
|
2025-08-20 12:10:35 +08:00
|
|
|
|
public static readonly AlphaToPercentConverter Instance = new();
|
2025-08-20 12:10:13 +08:00
|
|
|
|
/// <inheritdoc />
|
2025-09-04 22:39:00 +08:00
|
|
|
|
public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
2025-08-12 23:08:54 +08:00
|
|
|
|
{
|
|
|
|
|
|
if (value is byte alpha)
|
|
|
|
|
|
{
|
|
|
|
|
|
// 将 0-255 的值转换为 0-100 的百分比字符串
|
|
|
|
|
|
return $"{Math.Round(alpha / 255.0 * 100.0)}%";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return "100%";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-08-20 12:10:13 +08:00
|
|
|
|
/// <inheritdoc />
|
2025-09-04 22:39:00 +08:00
|
|
|
|
public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
|
2025-08-12 23:08:54 +08:00
|
|
|
|
{
|
|
|
|
|
|
if (value is string percentStr)
|
|
|
|
|
|
{
|
|
|
|
|
|
// 移除 '%' 符号并尝试解析
|
2025-08-20 12:10:13 +08:00
|
|
|
|
if (double.TryParse(percentStr.TrimEnd('%'), out var percent))
|
2025-08-12 23:08:54 +08:00
|
|
|
|
{
|
|
|
|
|
|
var clampedPercent = Math.Max(0, Math.Min(100, percent));
|
|
|
|
|
|
var alpha = (byte)Math.Round(clampedPercent / 100.0 * 255.0);
|
|
|
|
|
|
return alpha;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 如果转换失败,返回 UnsetValue 以保留原值
|
|
|
|
|
|
return DependencyProperty.UnsetValue;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|