I love WPF

"jamais sans son interface"

I love WPF

"jamais sans son interface"

ColumnDefinition visibility

To have visible Binding on ColumnDefinition (idem a RowDefinition) use this class

public class ColumnDefinitionExtended : ColumnDefinition
{
    // Variables
    public static DependencyProperty VisibleProperty;

    // Properties
    public Boolean Visible
    {
        get { return (Boolean)GetValue(VisibleProperty); }
        set { SetValue(VisibleProperty, value); }
    }

    // Constructors
    static ColumnDefinitionExtended()
    {
        VisibleProperty = DependencyProperty.Register("Visible",
            typeof(Boolean),
            typeof(ColumnDefinitionExtended),
            new PropertyMetadata(true, new PropertyChangedCallback(OnVisibleChanged)));

        ColumnDefinition.WidthProperty.OverrideMetadata(typeof(ColumnDefinitionExtended),
            new FrameworkPropertyMetadata(new GridLength(1, GridUnitType.Star), null,
                new CoerceValueCallback(CoerceWidth)));

        ColumnDefinition.MinWidthProperty.OverrideMetadata(typeof(ColumnDefinitionExtended),
            new FrameworkPropertyMetadata((Double)0, null,
                new CoerceValueCallback(CoerceMinWidth)));
    }

    // Get/Set
    public static void SetVisible(DependencyObject obj, Boolean nVisible)
    {
        obj.SetValue(VisibleProperty, nVisible);
    }
    public static Boolean GetVisible(DependencyObject obj)
    {
        return (Boolean)obj.GetValue(VisibleProperty);
    }

    static void OnVisibleChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
    {
        obj.CoerceValue(ColumnDefinition.WidthProperty);
        obj.CoerceValue(ColumnDefinition.MinWidthProperty);
    }
    static Object CoerceWidth(DependencyObject obj, Object nValue)
    {
        return (((ColumnDefinitionExtended)obj).Visible) ? nValue : new GridLength(0);
    }
    static Object CoerceMinWidth(DependencyObject obj, Object nValue)
    {
        return (((ColumnDefinitionExtended)obj).Visible) ? nValue : (Double)0;
    }
}

and use like this

<Grid.ColumnDefinitions>
    <ColumnDefinitionExtended Width="25*"
                                Visible="{Binding ColVisible}" />
    <ColumnDefinitionExtended Width="5"
                                Visible="{Binding ColVisible}" />
    <ColumnDefinition Width="75*" />
</Grid.ColumnDefinitions>

for binding to

#region ColVisible
private bool _ColVisible = true;
public bool ColVisible
{
    get { return _ColVisible; }
    set { _ColVisible = value; OnPropertyChanged("ColVisible"); }
}
#endregion

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut