Frage

Gibt es eine Möglichkeit, die vorhandenen WPF BooleanToVisibilityConverter Konverter zu verwenden, aber falsche Werte konvertieren Hidden statt der Standard-Komprimiert, oder sollte ich nur meine eigene schreiben? Ich bin an einem Projekt, wo es enormen Aufwand ist etwas Einfaches wie dies zu tun (gemeinsam Sachen geht in eine separate Lösung, und der Neuaufbau / checkin / Merge-Prozess ist ein überwuchert mutiertes Ungetüm eines Prozesses), so dass ich, wenn ich lieber konnte diese einen Parameter in den bestehenden passieren als erwähnt durch die Reifen zu springen nur.

War es hilfreich?

Lösung

Leider ist es wandelt nur auf sichtbares oder Komprimierte, so dass Sie Ihre eigenen schreiben müssen. Hier ist die Methode Konvertieren nach Reflektor:

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

Andere Tipps

Ich habe die einfachste und beste Lösung gefunden, dies zu sein:

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

Wenn es verwenden, konfigurieren Sie nur eine Version, die genau das tut, was Sie es in XAML wie diese brauchen:

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

Benutzen Sie diese dann in einem oder mehreren Bindungen wie folgt aus:

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

Diese einfache Lösung Adressen versteckt / kollabiert Präferenzen sowie Umkehrung / negiert die Wirkung.

SILVERLIGHT Nutzer muss die [ValueConversion] Erklärung fallen, da dieses Attribut nicht Teil des Rahmens Silverlight ist. Es ist nicht unbedingt notwendig in WPF auch nicht, aber steht im Einklang mit eingebauten in Konvertern.

Können Sie nicht nur verwenden Stil anstelle eines Wandlers? Der Code würde so etwas wie:

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

Sie müssen die Eigenschaft zur Verfügung zu stellen, sich Punkt auf Ihre Bool Eigenschaft bindend.

Ich mag die Parameter verwenden, um die Sichtbarkeit Reversierlogik: Zum Umkehren Logik einfach ausgedrückt: Converter = Rückwärts in Ihrem XAML-Code

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

Ich schrieb BoolToVisibilityConverte wo Sie unsichtbaren Zustand in Parameter passieren kann:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    var boolValue = (bool) value;
    return boolValue ? Visibility.Visible : (parameter ?? Visibility.Hidden);
}

So mögen Sie diese binden können:

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

Hope, das hilft:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top