示例#1
0
        //TODO: Maybe make another parent element so all this can be done without locking the UI thread until the end
        private void BuildBingoGrid()
        {
            //remove the old grid if there is one
            if (BingoGrid.Children.Count > 0)
            {
                BingoGrid.Children.Clear();
            }

            var gridColumns = new List <ColumnDefinition>();
            var gridRows    = new List <RowDefinition>();

            GridHelper.CalculateGridSizes(BingoGrid, BingoTileDefs.Width, BingoTileDefs.Height);
            BingoGrid.HorizontalAlignment = HorizontalAlignment.Center;
            BingoGrid.VerticalAlignment   = VerticalAlignment.Center;
            double colWidth  = BingoGrid.Width / BingoTileDefs.Width;
            double rowHeight = BingoGrid.Height / BingoTileDefs.Height;

            for (int x = 0; x < BingoTileDefs.Width; ++x)
            {
                ColumnDefinition column = new ColumnDefinition();
                gridColumns.Add(column);
            }
            foreach (var col in gridColumns)
            {
                col.Width = new GridLength(colWidth);
                BingoGrid.ColumnDefinitions.Add(col);
            }
            for (int y = 0; y < BingoTileDefs.Height; ++y)
            {
                RowDefinition row = new RowDefinition();
                gridRows.Add(row);
            }
            foreach (var row in gridRows)
            {
                row.Height = new GridLength(rowHeight);
                BingoGrid.RowDefinitions.Add(row);
            }

            var defs = BingoTileDefs.Tiles;

            if (FindResource("BingoTileTemplate") is ControlTemplate tileTemplate)
            {
                BingoTileDef def = null;
                UpgradeGridControls.Clear();
                for (int x = 0; x < BingoTileDefs.Width; ++x)
                {
                    for (int y = 0; y < BingoTileDefs.Height; ++y)
                    {
                        BingoTileData tileData = new BingoTileData();
                        if (defs.GetLength(0) > x && defs.GetLength(1) > y)
                        {
                            def = defs[x, y];
                            tileData.TileDef = def;
                        }
                        Control gridTile = new Control
                        {
                            Template = tileTemplate
                        };
                        tileData.Height      = rowHeight;
                        tileData.Width       = colWidth;
                        tileData.X           = x;
                        tileData.Y           = y;
                        tileData.ImgVisible  = IsBingoTileVisible(tileData);
                        gridTile.DataContext = tileData;
                        Grid.SetRow(gridTile, y);
                        Grid.SetColumn(gridTile, x);
                        BingoGrid.Children.Add(gridTile);
                        if (tileData.TileDef != null && tileData.TileDef.Type == BingoTileType.Upgrade)
                        {
                            UpgradeGridControls.Add(gridTile);
                        }
                    }
                }
            }
            else
            {
                ErrorTracker.CurrentError = "Could not find bingo tile template";
            }
        }