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)); } }
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)); } }