using System.Globalization; using System.Windows; using System.Windows.Data; using System.Windows.Media; namespace CursorLang.Views; /// /// Показывает элемент, если значение совпадает с одним из перечисленных /// в параметре через запятую. Нужен, чтобы настройки точки привязки /// и настройки экрана не показывались одновременно. /// public sealed class EnumToVisibilityConverter : IValueConverter { public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { string? current = value?.ToString(); bool matches = parameter?.ToString()? .Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries) .Any(expected => expected == current) ?? false; return matches ? Visibility.Visible : Visibility.Collapsed; } public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) => Binding.DoNothing; } /// /// Цвет в запись вида «#RRGGBB»: альфа не показывается, потому что /// за прозрачность отвечает отдельная настройка. /// public sealed class ColorToHexConverter : IValueConverter { public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) => value is Color color ? $"#{color.R:X2}{color.G:X2}{color.B:X2}" : string.Empty; public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) => Binding.DoNothing; } /// /// Цвет в кисть — для образцов палитры в списке. /// public sealed class ColorToBrushConverter : IValueConverter { public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) => value is Color color ? new SolidColorBrush(color) : Brushes.Transparent; public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) => value is SolidColorBrush brush ? brush.Color : Binding.DoNothing; }