示例#1
0
        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++;
            }
        }
示例#2
0
        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);
        }