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();
}
}