using System;
using System.Windows;
using System.Windows.Controls;
namespace InABox.DynamicGrid
{
///
/// Interaction logic for KanbanGrid.xaml
///
public partial class DynamicKanbanGrid : UserControl
{
private static readonly DependencyPropertyKey ColumnsPropertyKey =
DependencyProperty.RegisterReadOnly(
"Columns",
typeof(FreezableCollection),
typeof(DynamicKanbanGrid),
new FrameworkPropertyMetadata(new FreezableCollection()
)
);
public static readonly DependencyProperty ColumnsProperty = ColumnsPropertyKey.DependencyProperty;
private readonly FreezableCollection columns;
public DynamicKanbanGrid()
{
InitializeComponent();
columns = new FreezableCollection();
columns.Changed += Columns_Changed;
//columns.CollectionChanged += Columns_CollectionChanged;
SetValue(ColumnsPropertyKey, columns);
}
public FreezableCollection Columns => (FreezableCollection)GetValue(ColumnsProperty);
private void Columns_Changed(object sender, EventArgs e)
{
_grid.Children.Clear();
_grid.ColumnDefinitions.Clear();
foreach (var column in columns)
{
column.OnCollapsed += Column_OnCollapsed;
_grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
column.SetValue(Grid.ColumnProperty, _grid.ColumnDefinitions.Count - 1);
_grid.Children.Add(column);
}
}
private void Column_OnCollapsed(object sender, bool collapsed)
{
var index = columns.IndexOf((DynamicKanbanColumn)sender);
_grid.ColumnDefinitions[index].Width = new GridLength(1, collapsed ? GridUnitType.Auto : GridUnitType.Star);
}
}
}