Exemple #1
0
        private void ElementOnLostMouseCapture(object sender, MouseEventArgs mouseEventArgs)
        {
            _element.MouseMove        -= ElementOnMouseMove;
            _element.MouseUp          -= ElementOnMouseUp;
            _element.LostMouseCapture -= ElementOnLostMouseCapture;

            if (_previewAdorner != null)
            {
                var relativePoint = _element.TranslatePoint(new Point(), _itemsControl);

                var topAnimation = new DoubleAnimation {
                    To = relativePoint.Y, Duration = GetAnimationDuration(_itemsControl), EasingFunction = new PowerEase()
                };
                topAnimation.Completed +=
                    (o, args) =>
                {
                    AdornerLayer.GetAdornerLayer(_itemsControl).Remove(_previewAdorner);
                    _previewAdorner = null;
                    _element.InvalidateProperty(UIElement.OpacityProperty);
                    _element = null;
                };
                _previewAdorner.BeginAnimation(PreviewAdorner.TopProperty, topAnimation);
            }

            if (_startIndex != _lastIndex)
            {
                _itemsControl.RaiseEvent(new RoutedPropertyChangedEventArgs <int>(_startIndex, _lastIndex, ReorderCompletedEvent));
            }
        }
Exemple #2
0
        private void ElementOnPreviewMouseDown(object sender, MouseEventArgs e)
        {
            if (!IsEnabled)
            {
                return;
            }
            _element = null;
            var element = e.OriginalSource as UIElement;

            if (element != null)
            {
                if (!GetIsElementDraggable(element))
                {
                    return;
                }
                _element = _itemsControl.ContainerFromElement(element) as FrameworkElement;
            }
            if (_element == null)
            {
                return;
            }

            var isCaptured = _element.CaptureMouse();

            if (isCaptured)
            {
                e.Handled = true;

                _element.MouseMove        += ElementOnMouseMove;
                _element.MouseUp          += ElementOnMouseUp;
                _element.LostMouseCapture += ElementOnLostMouseCapture;

                var sourceItem = _element.DataContext;
                _startIndex = _collection.IndexOf(sourceItem);
                _lastIndex  = _startIndex;

                var adornerLayer = AdornerLayer.GetAdornerLayer(_itemsControl);
                if (adornerLayer != null)
                {
                    _element.SetCurrentValue(UIElement.OpacityProperty, 0.0);
                    var firstChild = (FrameworkElement)VisualTreeHelper.GetChild(_element, 0);
                    var top        = e.GetPosition(_itemsControl).Y;
                    _positionDelta  = e.GetPosition(_element);
                    _previewAdorner = new PreviewAdorner(_itemsControl, firstChild)
                    {
                        Top = top - _positionDelta.Y
                    };
                    adornerLayer.Add(_previewAdorner);
                }
            }
        }
        private void ElementOnPreviewMouseDown(object sender, MouseEventArgs e)
        {
            if (!IsEnabled) return;
            _element = null;
            var element = e.OriginalSource as UIElement;
            if (element != null)
            {
                if (!GetIsElementDraggable(element)) return;
                _element = _itemsControl.ContainerFromElement(element) as FrameworkElement;
            }
            if (_element == null) return;

            var isCaptured = _element.CaptureMouse();
            if (isCaptured)
            {
                e.Handled = true;

                _element.MouseMove += ElementOnMouseMove;
                _element.MouseUp += ElementOnMouseUp;
                _element.LostMouseCapture += ElementOnLostMouseCapture;

                var sourceItem = _element.DataContext;
                _startIndex = _collection.IndexOf(sourceItem);
                _lastIndex = _startIndex;

                var adornerLayer = AdornerLayer.GetAdornerLayer(_itemsControl);
                if (adornerLayer != null)
                {
                    _element.SetCurrentValue(UIElement.OpacityProperty, 0.0);
                    var firstChild = (FrameworkElement)VisualTreeHelper.GetChild(_element, 0);
                    var top = e.GetPosition(_itemsControl).Y;
                    _positionDelta = e.GetPosition(_element);
                    _previewAdorner = new PreviewAdorner(_itemsControl, firstChild)
                                          {
                                              Top = top - _positionDelta.Y
                                          };
                    adornerLayer.Add(_previewAdorner);
                }
            }
        }
        private void ElementOnLostMouseCapture(object sender, MouseEventArgs mouseEventArgs)
        {
            _element.MouseMove -= ElementOnMouseMove;
            _element.MouseUp -= ElementOnMouseUp;
            _element.LostMouseCapture -= ElementOnLostMouseCapture;

            if (_previewAdorner != null)
            {
                var relativePoint = _element.TranslatePoint(new Point(), _itemsControl);

                var topAnimation = new DoubleAnimation { To = relativePoint.Y, Duration = GetAnimationDuration(_itemsControl), EasingFunction = new PowerEase() };
                topAnimation.Completed +=
                    (o, args) =>
                    {
                        AdornerLayer.GetAdornerLayer(_itemsControl).Remove(_previewAdorner);
                        _previewAdorner = null;
                        _element.InvalidateProperty(UIElement.OpacityProperty);
                        _element = null;
                    };
                _previewAdorner.BeginAnimation(PreviewAdorner.TopProperty, topAnimation);
            }

            if (_startIndex != _lastIndex)
            {
                _itemsControl.RaiseEvent(new RoutedPropertyChangedEventArgs<int>(_startIndex, _lastIndex, ReorderCompletedEvent));
            }
        }