public void ApplyBoard(BoardState boardState, Canvas canvas)
 {
     this.Canvas = canvas;
     foreach (int columnIndex in Column.AllIndices)
     {
         var column = boardState[columnIndex];
         for (int i = 0; i < column.NumOfDisks; i++)
         {
             var disk = DiskElement.Create(column.Color);
             this.AddDiskToColumn(columnIndex, disk);
             canvas.Children.Add(disk);
         }
     }
     for (int i = 0; i < boardState.EatenBlacks; i++)
     {
         var disk = DiskElement.Create(GameColor.Black);
         this.AddDiskToBlackEatens(disk);
         canvas.Children.Add(disk);
     }
     for (int i = 0; i < boardState.EatenWhites; i++)
     {
         var disk = DiskElement.Create(GameColor.White);
         this.AddDiskToWhiteEatens(disk);
         canvas.Children.Add(disk);
     }
 }
        private void AddDiskToWhiteEatens(DiskElement disk)
        {
            var position = CanvasPosition.CreateBottomLeft(85, 92.5);

            if (EatenWhites.Count > 0)
            {
                position =
                    EatenWhites.First()
                    .CanvasPosition
                    .AddVertical(-15)
                    .NormalizeVertically(eatensColumNormalization);
            }
            disk.CanvasPosition = position;
            EatenWhites.AddFirst(disk);
        }
 private void AddDiskToColumn(int columnIndex, DiskElement disk)
 {
     if (this.DisksAtColumn[columnIndex].Count == 0)
     {
         disk.CanvasPosition = InitialCanvasPosition(columnIndex);
     }
     else
     {
         disk.CanvasPosition =
             this.DisksAtColumn[columnIndex]
             .First()
             .CanvasPosition
             .AddVertical(15)
             .NormalizeVertically(disksColumNormalization);
     }
     this.DisksAtColumn[columnIndex].AddFirst(disk);
 }