DynamicKanbanGrid.xaml.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System;
  2. using System.Windows;
  3. using System.Windows.Controls;
  4. namespace InABox.DynamicGrid
  5. {
  6. /// <summary>
  7. /// Interaction logic for KanbanGrid.xaml
  8. /// </summary>
  9. public partial class DynamicKanbanGrid : UserControl
  10. {
  11. private static readonly DependencyPropertyKey ColumnsPropertyKey =
  12. DependencyProperty.RegisterReadOnly(
  13. "Columns",
  14. typeof(FreezableCollection<DynamicKanbanColumn>),
  15. typeof(DynamicKanbanGrid),
  16. new FrameworkPropertyMetadata(new FreezableCollection<DynamicKanbanColumn>()
  17. )
  18. );
  19. public static readonly DependencyProperty ColumnsProperty = ColumnsPropertyKey.DependencyProperty;
  20. private readonly FreezableCollection<DynamicKanbanColumn> columns;
  21. public DynamicKanbanGrid()
  22. {
  23. InitializeComponent();
  24. columns = new FreezableCollection<DynamicKanbanColumn>();
  25. columns.Changed += Columns_Changed;
  26. //columns.CollectionChanged += Columns_CollectionChanged;
  27. SetValue(ColumnsPropertyKey, columns);
  28. }
  29. public FreezableCollection<DynamicKanbanColumn> Columns => (FreezableCollection<DynamicKanbanColumn>)GetValue(ColumnsProperty);
  30. private void Columns_Changed(object sender, EventArgs e)
  31. {
  32. _grid.Children.Clear();
  33. _grid.ColumnDefinitions.Clear();
  34. foreach (var column in columns)
  35. {
  36. column.OnCollapsed += Column_OnCollapsed;
  37. _grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
  38. column.SetValue(Grid.ColumnProperty, _grid.ColumnDefinitions.Count - 1);
  39. _grid.Children.Add(column);
  40. }
  41. }
  42. private void Column_OnCollapsed(object sender, bool collapsed)
  43. {
  44. var index = columns.IndexOf((DynamicKanbanColumn)sender);
  45. _grid.ColumnDefinitions[index].Width = new GridLength(1, collapsed ? GridUnitType.Auto : GridUnitType.Star);
  46. }
  47. }
  48. }