Пример #1
0
        private void HoldCompleted(object sender, ManipulationCompletedEventArgs e)
        {
            if (!IsActive)
            {
                return;
            }

            // stop the timer so that we don't try to re-fix this thing after moving to our
            // final destination.
            _dispatcherTimer.Stop();

            var dragIndex      = _currentIndex;
            var targetItem     = _pointIndex.Get(_currentIndex);
            var targetLocation = targetItem.Position.Top - _scrollViewer.VerticalOffset;
            var transform      = _dragImage.GetVerticalOffset().Transform;

            transform.Animate(null, targetLocation, CompositeTransform.TranslateYProperty, 200, 0, completed: () =>
            {
                // reshow the hidden item
                if (_cardView != null)
                {
                    _cardView.Opacity = 1.0;
                }

                // fade out the dragged image
                if (_dragImage != null)
                {
                    _dragImage.Animate(null, 0.0, UIElement.OpacityProperty, 700, 0,
                                       completed: () => { _dragImage.Visibility = Visibility.Collapsed; });
                }

                Complete();

                if (dragIndex == _initialIndex)
                {
                    return;
                }

                // move the dragged item
                if (_cardView == null)
                {
                    return;
                }

                var item = (CardViewModel)_cardView.DataContext;

                _cardsModel.Remove(item);
                _cardsModel.Insert(dragIndex, item);
                _cardsModel.Refresh();

                // fire off the event for subscribers
                _eventAggregator.Publish(CardPriorityChanged.Create(item.Id, dragIndex, _cardsModel.ToList()));
            });

            IsActive = false;
        }
Пример #2
0
        public void Handle(CardPriorityChanged message)
        {
            switch (message.Type)
            {
            case PositionType.Top:
                Handle(api => api.Cards.ChangePos(new CardId(message.CardId), Position.Top));
                break;

            case PositionType.Bottom:
                Handle(api => api.Cards.ChangePos(new CardId(message.CardId), Position.Bottom));
                break;

            case PositionType.Exact:
                Handle(api => api.Cards.ChangePos(new CardId(message.CardId), message.Pos));
                break;
            }
        }