private void InitialiseGrid() { if (!_viewModel.Tiles.Any()) { return; } TileGrid.ColumnDefinitions.Clear(); TileGrid.RowDefinitions.Clear(); TileGrid.Children.Clear(); for (var x = 0; x < _viewModel.NumColumns; x++) { TileGrid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); } var numRows = (int)Math.Ceiling((decimal)_viewModel.Tiles.Count / _viewModel.NumColumns); for (var y = 0; y < numRows; y++) { TileGrid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); } var n = 0; foreach (var tile in _viewModel.Tiles) { var ucTile = new TileUserControl(tile); ucTile.SetValue(Grid.RowProperty, n / _viewModel.NumColumns); ucTile.SetValue(Grid.ColumnProperty, n % _viewModel.NumColumns); TileGrid.Children.Insert(0, ucTile); n++; } }
private void InitializeAndBeginAnimation(TileUserControl selectedTileControl) { var absoluteTilePosition = selectedTileControl.TransformToAncestor(this).Transform(new Point(0, 0)); var tileViewModel = selectedTileControl.DataContext as TileViewModel; var selectedTile = new TileUserControl(tileViewModel) { Width = selectedTileControl.ActualWidth, Height = selectedTileControl.ActualHeight }; Canvas.SetLeft(selectedTile, absoluteTilePosition.X); Canvas.SetTop(selectedTile, absoluteTilePosition.Y); var targetXPos = ActualWidth * 0.5d - WinnerTileTargetWidth * 0.5d; var targetYPos = ActualHeight * 0.5d - WinnerTileTargetHeight * 0.5d; var animWidth = new DoubleAnimation { From = selectedTile.Width, To = 800, Duration = new Duration(TimeSpan.FromSeconds(2)) }; var animHeight = new DoubleAnimation { From = selectedTile.Height, To = 500, Duration = new Duration(TimeSpan.FromSeconds(2)) }; var animXPos = new DoubleAnimation { From = absoluteTilePosition.X, To = targetXPos, Duration = new Duration(TimeSpan.FromSeconds(2)) }; var animYPos = new DoubleAnimation { From = absoluteTilePosition.Y, To = targetYPos, Duration = new Duration(TimeSpan.FromSeconds(2)) }; Storyboard.SetTarget(animWidth, selectedTile); Storyboard.SetTarget(animHeight, selectedTile); Storyboard.SetTarget(animXPos, selectedTile); Storyboard.SetTarget(animYPos, selectedTile); Storyboard.SetTargetProperty(animWidth, new PropertyPath(WidthProperty)); Storyboard.SetTargetProperty(animHeight, new PropertyPath(HeightProperty)); Storyboard.SetTargetProperty(animXPos, new PropertyPath(LeftProperty)); Storyboard.SetTargetProperty(animYPos, new PropertyPath(TopProperty)); var storyboard = new Storyboard(); storyboard.Children.Add(animWidth); storyboard.Children.Add(animHeight); storyboard.Children.Add(animXPos); storyboard.Children.Add(animYPos); Canvas.Children.Add(selectedTile); storyboard.Begin(this); }