public static void OrganizeGrid(this Grid grid, List <List <View> > items, OrganizeMode mode) { rowCount = grid.RowDefinitions.Count; columnCount = grid.ColumnDefinitions.Count; if (items.Count == 0) { return; } if (mode == OrganizeMode.HorizontalRight) { gridPair = new Vector2D <int>() { X = columnCount - 1, Y = 0 }; foreach (View view in items[0]) { grid.Children.Add(view, columnCount - 1, 0); } } else { gridPair = new Vector2D <int>() { X = 0, Y = 0 }; foreach (View view in items[0]) { grid.Children.Add(view, 0, 0); } } for (int i = 1; i < items.Count; i++) { SetGridPairs(mode); if (gridPair.Y > rowCount - 1) { grid.RowDefinitions.Add(new RowDefinition() { Height = grid.RowDefinitions[0].Height }); rowCount++; } if (gridPair.X > columnCount - 1) { grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = grid.ColumnDefinitions[0].Width }); columnCount++; } foreach (View view in items[i]) { grid.Children.Add(view, (int)gridPair.X, (int)gridPair.Y); } } }
private static Vector2D <int> SetGridPairs(OrganizeMode mode) { if (mode == OrganizeMode.HorizontalLeft) { if (gridPair.X < columnCount - 1) { gridPair.X++; } else { gridPair.X = 0; gridPair.Y++; } } else if (mode == OrganizeMode.HorizontalRight) { if (gridPair.X > 0) { gridPair.X--; } else { gridPair.X = columnCount - 1; gridPair.Y++; } } else if (mode == OrganizeMode.VerticalLeft) { if (gridPair.Y < rowCount - 1) { gridPair.Y++; } else { gridPair.Y = 0; gridPair.X++; } } else if (mode == OrganizeMode.TwoRowSpanLeft) { if (gridPair.Y % 2 == 0) { gridPair.Y++; } else if (gridPair.X < columnCount - 1) { gridPair.Y -= 1; gridPair.X++; } else { gridPair.Y++; gridPair.X = 0; } } else if (mode == OrganizeMode.HorizontalZigZag) { if (gridPair.Y % 2 == 0) { if (gridPair.X < columnCount - 1) { gridPair.X++; } else { gridPair.Y++; } } else { if (gridPair.X > 0) { gridPair.X--; } else { gridPair.Y++; } } } return(gridPair); }
public static void OrganizeGrid <T>(this Grid grid, IEnumerable <T> items, OrganizeMode mode) { rowCount = grid.RowDefinitions.Count; columnCount = grid.ColumnDefinitions.Count; if (!typeof(View).IsAssignableFrom(typeof(T))) { throw new ArgumentException(); } if (items.Count() == 0) { return; } if (mode == OrganizeMode.HorizontalRight) { gridPair = new Vector2D <int>() { X = columnCount - 1, Y = 0 }; grid.Children.Add(items.ElementAt(0) as View, columnCount - 1, 0); } else { gridPair = new Vector2D <int>() { X = 0, Y = 0 }; grid.Children.Add(items.ElementAt(0) as View, 0, 0); } if (grid.RowDefinitions.Count == 0) { grid.RowDefinitions.Add(new RowDefinition()); } if (grid.ColumnDefinitions.Count == 0) { grid.ColumnDefinitions.Add(new ColumnDefinition()); } for (int i = 1; i < items.Count(); i++) { SetGridPairs(mode); if (gridPair.Y > rowCount - 1) { //var height = grid.RowDefinitions.Count > 0 ? grid.RowDefinitions[0].Height : grid.Height; grid.RowDefinitions.Add(new RowDefinition() { Height = grid.RowDefinitions.First().Height }); rowCount++; } if (gridPair.X > columnCount - 1) { grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = grid.ColumnDefinitions.First().Width }); columnCount++; } Console.WriteLine("Utility 679 grid pair x " + gridPair.X + " grid pair y " + gridPair.Y); grid.Children.Add(items.ElementAt(i) as View, gridPair.X, gridPair.Y); } }