1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- using System;
- using System.Windows;
- using System.Windows.Controls;
- namespace InABox.DynamicGrid
- {
- /// <summary>
- /// Interaction logic for KanbanGrid.xaml
- /// </summary>
- public partial class DynamicKanbanGrid : UserControl
- {
- private static readonly DependencyPropertyKey ColumnsPropertyKey =
- DependencyProperty.RegisterReadOnly(
- "Columns",
- typeof(FreezableCollection<DynamicKanbanColumn>),
- typeof(DynamicKanbanGrid),
- new FrameworkPropertyMetadata(new FreezableCollection<DynamicKanbanColumn>()
- )
- );
- public static readonly DependencyProperty ColumnsProperty = ColumnsPropertyKey.DependencyProperty;
- private readonly FreezableCollection<DynamicKanbanColumn> columns;
- public DynamicKanbanGrid()
- {
- InitializeComponent();
- columns = new FreezableCollection<DynamicKanbanColumn>();
- columns.Changed += Columns_Changed;
- //columns.CollectionChanged += Columns_CollectionChanged;
- SetValue(ColumnsPropertyKey, columns);
- }
- public FreezableCollection<DynamicKanbanColumn> Columns => (FreezableCollection<DynamicKanbanColumn>)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);
- }
- }
- }
|