调整代码

This commit is contained in:
GG Z
2026-02-22 20:03:42 +08:00
parent 2ad3d0fde0
commit 7e2d5be3cd
258 changed files with 2916 additions and 5013 deletions

View File

@@ -0,0 +1,62 @@
using System.Globalization;
using System.Windows.Data;
namespace Melskin.Converters.Internal
{
internal class ProgressToAngleConverter : IMultiValueConverter
{
public readonly static ProgressToAngleConverter Instance = new ProgressToAngleConverter();
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
// 防御性检查:检查 UnsetValue 或 Null
if (values == null || values.Length < 2 ||
values[0] == System.Windows.DependencyProperty.UnsetValue || values[0] == null ||
values[1] == System.Windows.DependencyProperty.UnsetValue || values[1] == null)
{
return System.Windows.Media.Geometry.Empty;
}
double value = System.Convert.ToDouble(values[0]);
double max = System.Convert.ToDouble(values[1]);
if (max <= 0) return System.Windows.Media.Geometry.Empty;
// 确保百分比在 0-0.9999 之间
double percent = (value / max) <= 0 ? 0 : (value / max) >= 1 ? 0.9999 : value / max;
double angle = percent * 360;
double size = 100;
double stroke = 10;
double center = size / 2;
double radius = (size - stroke) / 2; // 半径 45
double rad = (angle - 90) * Math.PI / 180;
double x = center + radius * Math.Cos(rad);
double y = center + radius * Math.Sin(rad);
bool isLargeArc = angle > 180;
Point startPoint = new Point(center, center - radius);
Point endPoint = new Point(x, y);
PathFigure figure = new PathFigure { StartPoint = startPoint, IsClosed = false };
figure.Segments.Add(new ArcSegment(
endPoint,
new Size(radius, radius),
0,
isLargeArc,
SweepDirection.Clockwise,
true));
return new PathGeometry(new[] { figure });
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}