/// <summary>
        /// Handler for Pointer Released event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void OnPointerReleased(object sender, PointerRoutedEventArgs e)
        {
            var ptrPt = _parentLbItem != null?e.GetCurrentPoint(_parentLbItem) : e.GetCurrentPoint(AssociatedObject);

            var isValidPointer = ((e.Pointer.PointerDeviceType == PointerDeviceType.Mouse) &&
                                  ((DragButton == DragButtonType.MouseLeftButton) || (DragButton == DragButtonType.MouseRightButton) ||
                                   (DragButton == DragButtonType.MouseMiddleButton))) ||
                                 ((e.Pointer.PointerDeviceType == PointerDeviceType.Pen) && (DragButton == DragButtonType.Pen)) ||
                                 ((e.Pointer.PointerDeviceType == PointerDeviceType.Touch) && (DragButton == DragButtonType.Touch));

            if (!isValidPointer)
            {
                return;
            }

            // Get the location
            var position = ptrPt.RawPosition;

            var fElem = AssociatedObject as FrameworkElement;

            if ((fElem == null) || (_parentFwPanel == null))
            {
                return;
            }

            // Get the location with respect to the parent
            var positionInParent = e.GetCurrentPoint(_parentFwPanel).RawPosition;
            await _parentFwPanel.EndFluidDragAsync(_parentLbItem ?? AssociatedObject, position, positionInParent, e.Pointer);
        }
        private async void OnPreviewMouseUp(object sender, MouseButtonEventArgs e)
        {
            if (e.ChangedButton != DragButton)
            {
                return;
            }

            var position = _parentLbItem != null?e.GetPosition(_parentLbItem) : e.GetPosition(AssociatedObject);

            var fElem = AssociatedObject as FrameworkElement;

            if ((fElem == null) || (_parentFwPanel == null))
            {
                return;
            }

            var positionInParent = e.GetPosition(_parentFwPanel);
            await _parentFwPanel.EndFluidDragAsync(_parentLbItem ?? AssociatedObject, position, positionInParent);
        }