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
