using Avalonia.Data.Converters; using Avalonia.Media; using Avalonia; using AuroraDesk.Core.Entities; using System; using System.Collections.ObjectModel; using System.Globalization; using System.Linq; namespace AuroraDesk.Presentation.Converters; /// /// 节点画布相关转换器 /// public static class NodeCanvasConverters { public static readonly IValueConverter BooleanToBorderBrushConverter = new BooleanToBorderBrushConverter(); public static readonly IValueConverter BooleanToBorderThicknessConverter = new BooleanToBorderThicknessConverter(); public static readonly IValueConverter FilterInputPointsConverter = new FilterInputPointsConverter(); public static readonly IValueConverter FilterOutputPointsConverter = new FilterOutputPointsConverter(); public static readonly IValueConverter NodeToSelectionTextConverter = new NodeToSelectionTextConverter(); public static readonly IValueConverter IsNotNullConverter = new IsNotNullConverter(); } /// /// 布尔值到边框颜色转换器(选中时显示蓝色边框) /// public class BooleanToBorderBrushConverter : IValueConverter { public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { if (value is bool isSelected && isSelected) { // 使用 StaticResource 的颜色,如果无法获取则使用默认蓝色 try { var color = Color.Parse("#3498DB"); // PrimaryBlue return new SolidColorBrush(color); } catch { return new SolidColorBrush(Color.FromRgb(52, 152, 219)); // #3498DB } } return new SolidColorBrush(Colors.Transparent); } public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) { throw new NotImplementedException(); } } /// /// 布尔值到边框厚度转换器(选中时显示边框) /// public class BooleanToBorderThicknessConverter : IValueConverter { public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { if (value is bool isSelected && isSelected) { return new Thickness(2); } return new Thickness(0); } public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) { throw new NotImplementedException(); } } /// /// 过滤输入连接点转换器 /// public class FilterInputPointsConverter : IValueConverter { public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { if (value is ObservableCollection points) { return points.Where(p => p.Type == ConnectionPointType.Input).ToList(); } return Enumerable.Empty(); } public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) { throw new NotImplementedException(); } } /// /// 过滤输出连接点转换器 /// public class FilterOutputPointsConverter : IValueConverter { public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { if (value is ObservableCollection points) { return points.Where(p => p.Type == ConnectionPointType.Output).ToList(); } return Enumerable.Empty(); } public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) { throw new NotImplementedException(); } } /// /// 节点到选择文本转换器 /// public class NodeToSelectionTextConverter : IValueConverter { public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { if (value is Node node) { return $"已选中1个对象 (节点)"; } return "未选中对象"; } public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) { throw new NotImplementedException(); } } /// /// 非空转换器(用于控制可见性) /// public class IsNotNullConverter : IValueConverter { public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { return value != null; } public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) { throw new NotImplementedException(); } }