Question

Y at-il un moyen d'utiliser le convertisseur WPF BooleanToVisibilityConverter existant, mais ont des valeurs faux converti Masqué au lieu de la valeur par défaut Collapsed, ou devrais-je écrire juste mon propre? Je suis sur un projet où il est en tête énorme pour faire simple quelque chose comme ça (truc partagé entre dans une solution séparée, et la reconstruction / checkin / processus de fusion est un mastodonte envahi par la végétation mutées d'un processus), donc je préférerais que je pourrait tout simplement passer un paramètre à l'existant que de sauter à travers les cerceaux mentionnés.

Était-ce utile?

La solution

Malheureusement, il convertit uniquement visible ou Effondré, de sorte que vous devrez écrire votre propre. Voici la méthode Convert selon réflecteur:

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);
}

Autres conseils

Je l'ai trouvé la plus simple et la meilleure solution pour être ceci:

[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;
  }
}

Lors de son utilisation, il suffit de configurer une version qui fait exactement ce que vous avez besoin dans XAML comme ceci:

<Blah.Resources>
  <local:BoolToVisibilityConverter
         x:Key="BoolToHiddenConverter"
         TrueValue="Visible" FalseValue="Hidden" />
</Blah.Resources>

Utilisez ensuite dans une ou plusieurs liaisons comme ceci:

<Foo Visibility="{Binding IsItFridayAlready, 
                          Converter={StaticResource BoolToHiddenConverter}}" />

Cette adresse simple solution de préférences cachées / effondrées, ainsi que l'inversion / annuler l'effet.

LES UTILISATEURS SilverLight doivent déposer la déclaration de [ValueConversion] que cet attribut ne fait pas partie du cadre Silverlight. Il est non strictement nécessaires WPF non plus, mais il est compatible avec les convertisseurs intégrés.

Pouvez-vous pas simplement utiliser un style au lieu d'un convertisseur? Le code serait quelque chose comme:

<Style x:Key="Triggers" TargetType="Button">
    <Style.Triggers>
    <Trigger Property="{Binding ...}" Value="false">
        <Setter Property = "Visibility" Value="Hidden"/>
    </Trigger>
    </Style.Triggers>
</Style>

Vous devrez fournir la propriété vous lier à un point à votre propriété bool.

Je préfère utiliser le paramètre pour inverser la logique de visibilité: Pour inverser la logique tout simplement: ConverterParameter = inverse 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 string;
    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);
}

Vous pouvez lier comme ceci:

Visibility="{Binding SomeBool, Converter={StaticResource ResourceKey=BooleanToVisibilityConverter}, ConverterParameter={x:Static Visibility.Collapsed}}"

Hope this helps:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top