2025-07-31 20:12:24 +08:00
|
|
|
|
using System.Globalization;
|
2025-07-11 09:20:23 +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>
|
|
|
|
|
|
/// 将浮点数类型的强度值转换为左上边距的 Thickness 对象。该转换器适用于需要根据浮点数值动态调整 UI 元素边距的场景。
|
|
|
|
|
|
/// 当输入的强度值为 1 时,生成的边距最小,随着强度值减小,边距逐渐增大,从而影响 UI 元素显示效果,如阴影或光照效果的范围。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[ValueConversion(typeof(double), typeof(Thickness))]
|
|
|
|
|
|
internal class IntensityToEmbossMarginLeftTopConverter : IValueConverter
|
2025-07-11 09:20:23 +08:00
|
|
|
|
{
|
2025-08-12 23:08:54 +08:00
|
|
|
|
public static readonly IntensityToEmbossMarginLeftTopConverter Instance = new();
|
2025-07-31 20:12:24 +08:00
|
|
|
|
|
2025-08-12 23:08:54 +08:00
|
|
|
|
public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
|
|
|
|
|
{
|
|
|
|
|
|
var intensity = (double)(value ?? 0.5);
|
|
|
|
|
|
//数值为1的时候边距最小,露出的着色边框越大
|
|
|
|
|
|
var marginValue = 2 * intensity;
|
|
|
|
|
|
return new Thickness(-marginValue, -marginValue, marginValue, marginValue);
|
|
|
|
|
|
}
|
2025-07-11 09:20:23 +08:00
|
|
|
|
|
2025-08-12 23:08:54 +08:00
|
|
|
|
public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
|
|
|
|
|
|
{
|
2025-08-20 12:10:13 +08:00
|
|
|
|
return Binding.DoNothing;
|
2025-07-11 09:20:23 +08:00
|
|
|
|
}
|
2025-08-12 23:08:54 +08:00
|
|
|
|
}
|