Existe-t-il un moyen d’utiliser le convertisseur WPF BooleanToVisibilityConverter existant, mais les valeurs False sont converties en Caché au lieu de Réduire par défaut, ou devrais-je simplement écrire le mien? Je suis sur un projet où il est extrêmement difficile de faire quelque chose de simple comme ça (les choses partagées vont dans une solution séparée, et le processus de reconstruction / archivage / fusion est un énorme géant muté d’un processus), donc je préférerais pourrait simplement passer un paramètre à l’existant plutôt que de sauter à travers les cerceaux qui viennent d’être mentionnés.
Malheureusement, il ne convertit que Visible ou Collapsed, vous devrez donc écrire le vôtre. Voici la méthode Convert selon Reflector:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { bool flag = false; if (value is bool) { flag = (bool)value; } else if (value is bool?) { bool? nullable = (bool?)value; flag = nullable.HasValue ? nullable.Value : false; } return (flag ? Visibility.Visible : Visibility.Collapsed); }
J’ai trouvé la solution la plus simple et la meilleure pour cela:
[ValueConversion(typeof(bool), typeof(Visibility))] public sealed class BoolToVisibilityConverter : IValueConverter { public Visibility TrueValue { get; set; } public Visibility FalseValue { get; set; } public BoolToVisibilityConverter() { // set defaults TrueValue = Visibility.Visible; FalseValue = Visibility.Collapsed; } public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (!(value is bool)) return null; return (bool)value ? TrueValue : FalseValue; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { if (Equals(value, TrueValue)) return true; if (Equals(value, FalseValue)) return false; return null; } }
Lorsque vous l’utilisez, configurez simplement une version qui fait exactement ce dont vous avez besoin dans XAML comme ceci:
Ensuite, utilisez-le dans une ou plusieurs liaisons comme ceci:
Cette solution simple aborde les préférences masquées / masquées tout en inversant / annulant l’effet.
SILVERLIGHT USERS doit supprimer la déclaration [ValueConversion]
car cet atsortingbut ne fait pas partie du framework Silverlight. Ce n’est pas ssortingctement nécessaire dans WPF non plus, mais est compatible avec les convertisseurs intégrés.
Ne pouvez-vous pas simplement utiliser un style plutôt qu’un convertisseur? Le code serait quelque chose comme:
Vous devrez fournir la propriété qui vous oblige à pointer vers votre propriété bool.
J’aime utiliser le paramètre pour inverser la logique de visibilité: Pour inverser la logique, mettez simplement: ConverterParameter = Inverser dans votre code xaml
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { bool flag = false; if (value is bool) { flag = (bool)value; } var reverse = parameter as ssortingng; if(reverse != null && reverse == "Reverse") flag != flag; return (flag ? Visibility.Visible : Visibility.Collapsed); }
J’ai écrit BoolToVisibilityConverte où vous pouvez passer l’état invisible dans le paramètre:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var boolValue = (bool) value; return boolValue ? Visibility.Visible : (parameter ?? Visibility.Hidden); }
Ainsi, vous pouvez vous lier comme ceci:
Visibility="{Binding SomeBool, Converter={StaticResource ResourceKey=BooleanToVisibilityConverter}, ConverterParameter={x:Static Visibility.Collapsed}}"
J’espère que cela t’aides 🙂