protected override void OnTemplateApplied(TemplateAppliedEventArgs e)
        {
            base.OnTemplateApplied(e);

            var canvas             = e.NameScope.Get <Canvas>("PART_Canvas");
            var pieceControlEasing = LinearEasing.For <double>();
            var pieceControlPropertyTransitionsX = new PropertyTransition(Canvas.LeftProperty, TimeSpan.FromSeconds(0.075), pieceControlEasing);
            var pieceControlPropertyTransitionsY = new PropertyTransition(Canvas.TopProperty, TimeSpan.FromSeconds(0.075), pieceControlEasing);

            foreach (var piece in (PuzzlePiece[])Enum.GetValues(typeof(PuzzlePiece)))
            {
                if (piece != PuzzlePiece.Space)
                {
                    var pieceControl = new PuzzlePieceControl();

                    pieceControl.DataContext = piece;

                    // Setting default values for Canvas properties since property transition doesn't work with NaN values

                    pieceControl.SetValue(Canvas.LeftProperty, 0.0);
                    pieceControl.SetValue(Canvas.TopProperty, 0.0);
                    pieceControl.PropertyTransitions.Add(pieceControlPropertyTransitionsX);
                    pieceControl.PropertyTransitions.Add(pieceControlPropertyTransitionsY);
                    pieceControl.Tapped += OnPieceControlTapped;

                    canvas.Children.Add(pieceControl);
                }
            }

            _pieceControls = canvas.Children;
        }
Beispiel #2
0
        private void SendToLocation(DockItem dockItem, double location)
        {
            double activeTarget;

            if (Math.Abs(_getLocation(dockItem) - location) < 1.0
                ||
                _activeAnimationTargetLocations.TryGetValue(dockItem, out activeTarget) &&
                Math.Abs(activeTarget - location) < 1.0)
            {
                return;
            }

            _activeAnimationTargetLocations[dockItem] = location;

            var animation = Animate.Property(dockItem, _canvasPerspexProperty, dockItem.GetValue(_canvasPerspexProperty),
                                             location, LinearEasing.For <double>(), TimeSpan.FromMilliseconds(200));

            animation.Subscribe(_ => { }, () =>
            {
                _setLocation(dockItem, location);
                _activeAnimationTargetLocations.Remove(dockItem);
            });
        }