using System.Globalization; using System.Windows; using System.Windows.Data; namespace AxiOmron.PcbCheck.Converters; /// /// 将布尔值转换为 ,支持通过 ConverterParameter 反转判定。 /// /// /// 当 ConverterParameter 为 "Invert"、"Inverse" 或 "!" 时,布尔值的真假意义取反。 /// public sealed class BooleanToVisibilityConverter : IValueConverter { /// /// 将布尔值转换为可见性。 /// /// 源布尔值。 /// 目标类型。 /// 若为 "Invert"/"!" 则反转判定。 /// 当前区域信息。 /// 或 。 public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { bool flag = value is bool b && b; if (IsInvert(parameter)) { flag = !flag; } return flag ? Visibility.Visible : Visibility.Collapsed; } /// /// 将可见性反向转换为布尔值。 /// /// 目标可见性。 /// 目标类型。 /// 若为 "Invert"/"!" 则反转判定。 /// 当前区域信息。 /// 布尔值。 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { bool flag = value is Visibility v && v == Visibility.Visible; if (IsInvert(parameter)) { flag = !flag; } return flag; } /// /// 判断参数是否要求反转判定。 /// /// 参数值。 /// 是否反转。 private static bool IsInvert(object? parameter) { if (parameter is null) { return false; } string token = parameter.ToString() ?? string.Empty; return token.Equals("Invert", StringComparison.OrdinalIgnoreCase) || token.Equals("Inverse", StringComparison.OrdinalIgnoreCase) || token.Equals("!", StringComparison.Ordinal); } }