53 lines
2.2 KiB
C#
53 lines
2.2 KiB
C#
using System.Globalization;
|
|
using System.Windows;
|
|
using System.Windows.Data;
|
|
using System.Windows.Media;
|
|
|
|
namespace CursorLang.Views;
|
|
|
|
/// <summary>
|
|
/// Показывает элемент, если значение совпадает с одним из перечисленных
|
|
/// в параметре через запятую. Нужен, чтобы настройки точки привязки
|
|
/// и настройки экрана не показывались одновременно.
|
|
/// </summary>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Цвет в запись вида «#RRGGBB»: альфа не показывается, потому что
|
|
/// за прозрачность отвечает отдельная настройка.
|
|
/// </summary>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Цвет в кисть — для образцов палитры в списке.
|
|
/// </summary>
|
|
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;
|
|
}
|