示例#1
0
        internal DragStartingContext InitializeReorder()
        {
            var dragVisual = this.ListView.DragBehavior.GetReorderVisual(this);

            if (dragVisual == null)
            {
                this.dragVisual = this.ListView.GetContainerForItem();

                this.dragVisual.Orientation   = this.Orientation;
                this.dragVisual.Width         = this.ActualWidth;
                this.dragVisual.Height        = this.ActualHeight;
                this.dragVisual.ListView      = this.ListView;
                this.dragVisual.isDragContent = true;
                this.dragVisual.IsSelected    = this.IsSelected;
                this.ListView.PrepareContainerForItem(this.dragVisual, this.DataContext);
            }

            (dragVisual as IDragDropElement).SkipHitTest = true;

            DragDrop.SetDragPositionMode(this, this.ListView.Orientation == Orientation.Vertical ? DragPositionMode.RailY : DragPositionMode.RailX);

            this.Opacity = 0.0;

            var surface = new CanvasDragSurface(this.ListView.childrenPanel as FrameworkElement, this.ListView.childrenPanel as Canvas, true);

            var payload = new ReorderItemsDragOperation(this, this.DataContext);

            this.ListView.DragBehavior.OnReorderStarted(this.DataContext);

            return(new DragStartingContext {
                DragVisual = dragVisual, Payload = payload, DragSurface = surface, HitTestStrategy = new ReorderListViewItemHitTestStrategy(this, surface.RootElement)
            });
        }
        DragStartingContext IDragDropElement.DragStarting(DragDropTrigger trigger, object initializeContext)
        {
            this.ListView.CleanupSwipedItem();

            DragStartingContext context = null;
            var dataItem = this.DataContext;

            if (dataItem != null)
            {
                bool       isExecuted = false;
                DragAction?dragAction = null;

                if (trigger == DragDropTrigger.Drag && (!this.isHandleEnabled || initializeContext != this.reorderHandle))
                {
                    if (this.ListView.LayoutDefinition is StackLayoutDefinition)
                    {
                        if (this.Owner.Orientation == Orientation.Horizontal)
                        {
                            if (this.SwipeDirection == ListViewItemSwipeDirection.Forward)
                            {
                                DragDrop.SetDragPositionMode(this, DragPositionMode.RailYForward);
                            }
                            else if (this.SwipeDirection == ListViewItemSwipeDirection.Backwards)
                            {
                                DragDrop.SetDragPositionMode(this, DragPositionMode.RailYBackwards);
                            }
                            else if (this.SwipeDirection == ListViewItemSwipeDirection.All)
                            {
                                DragDrop.SetDragPositionMode(this, DragPositionMode.RailY);
                            }
                        }
                        else
                        {
                            if (this.SwipeDirection == ListViewItemSwipeDirection.Forward)
                            {
                                DragDrop.SetDragPositionMode(this, DragPositionMode.RailXForward);
                            }
                            else if (this.SwipeDirection == ListViewItemSwipeDirection.Backwards)
                            {
                                DragDrop.SetDragPositionMode(this, DragPositionMode.RailXBackwards);
                            }
                            else if (this.SwipeDirection == ListViewItemSwipeDirection.All)
                            {
                                DragDrop.SetDragPositionMode(this, DragPositionMode.RailX);
                            }
                        }

                        isExecuted = this.ListView.commandService.ExecuteCommand(CommandId.ItemDragStarting, new ItemDragStartingContext(dataItem, DragAction.ItemAction, this));
                        dragAction = DragAction.ItemAction;
                    }
                }
                else
                {
                    isExecuted = this.ListView.commandService.ExecuteCommand(CommandId.ItemDragStarting, new ItemDragStartingContext(dataItem, DragAction.Reorder, this));
                    dragAction = DragAction.Reorder;
                }

                if (isExecuted && dragAction.HasValue)
                {
                    this.PrepareDragVisual(dragAction.Value);

                    this.CancelDirectManipulations();

                    if (dragAction.Value == DragAction.Reorder)
                    {
                        context = this.InitializeReorder();
                    }
                    else if (dragAction.Value == DragAction.ItemAction)
                    {
                        // We might need to cancel manipulations on the dragvisual
                        //// this.dragVisual.CancelDirectManipulations();

                        this.UpdateActionContentClipping(0);

                        CanvasDragSurface dragSurface = new CanvasDragSurface(this.ListView.childrenPanel, this.ListView.childrenPanel as Canvas, false);
                        dragSurface.MaxPositionOffset = this.listView.ItemSwipeOffset;

                        context = new DragStartingContext
                        {
                            DragSurface     = dragSurface,
                            DragVisual      = this.dragVisual,
                            HitTestStrategy = new ListViewItemHittestStrategy(this, this),
                            Payload         = DragAction.ItemAction
                        };
                    }
                }
            }

            return(context);
        }