private static Visibility GetVisibility(bool boolValue, VisibilityAsBooleanConverterOptions options)
 {
     if (boolValue)
     {
         return(Visibility.Visible);
     }
     else if (options.HasFlag(VisibilityAsBooleanConverterOptions.UseHidden))
     {
         return(Visibility.Hidden);
     }
     else
     {
         return(Visibility.Collapsed);
     }
 }
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            bool?b = GetBool(value);

            if (b != null)
            {
                VisibilityAsBooleanConverterOptions options = GetOptions(parameter);

                if (options.HasFlag(VisibilityAsBooleanConverterOptions.Negate))
                {
                    b = !b.Value;
                }

                return(GetVisibility(b.Value, options));
            }

            return(null);
        }
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            VisibilityAsBooleanConverterOptions options = GetOptions(parameter);

            object[] input = new object[values.Length];
            for (int i = 0; i < values.Length; i++)
            {
                bool?b = GetBool(values[i]);
                if (b != null)
                {
                    input[i] = b.Value;
                }
                else
                {
                    return(null);
                }
            }

            LogicalConversionOptions logicalOptions = LogicalConversionOptions.None;

            if (options.HasFlag(VisibilityAsBooleanConverterOptions.CombineWithAnd))
            {
                logicalOptions |= LogicalConversionOptions.CombineWithAnd;
            }
            else
            {
                logicalOptions |= LogicalConversionOptions.CombineWithOr;
            }

            if (options.HasFlag(VisibilityAsBooleanConverterOptions.Negate))
            {
                logicalOptions |= LogicalConversionOptions.Negate;
            }

            bool boolean = (bool)this.logicalConverter.Convert(input, null, logicalOptions, culture);

            return(GetVisibility(boolean, options));
        }