Example #1
0
        private void RectangleSelection_PointerReleased(object sender, PointerRoutedEventArgs e)
        {
            Canvas.SetLeft(selectionRectangle, 0);
            Canvas.SetTop(selectionRectangle, 0);
            selectionRectangle.Width  = 0;
            selectionRectangle.Height = 0;
            uiElement.PointerMoved   -= RectangleSelection_PointerMoved;

            scrollViewer.ViewChanged -= ScrollViewer_ViewChanged;
            uiElement.ReleasePointerCapture(e.Pointer);
            if (selectionChanged != null)
            {
                // Restore and trigger SelectionChanged event
                uiElement.SelectionChanged -= selectionChanged;
                uiElement.SelectionChanged += selectionChanged;
                if (prevSelectedItems == null || !uiElement.SelectedItems.SequenceEqual(prevSelectedItems))
                {
                    // Trigger SelectionChanged event if the selection has changed
                    selectionChanged(sender, null);
                }
            }
            if (selectionState == SelectionState.Active || e.OriginalSource is ListViewBase)
            {
                // Always trigger SelectionEnded to focus the file list when clicking on the empty space (#2977)
                OnSelectionEnded();
            }

            selectionStrategy = null;
            selectionState    = SelectionState.Inactive;

            e.Handled = true;
        }
Example #2
0
        private void RectangleSelection_PointerPressed(object sender, PointerRoutedEventArgs e)
        {
            if (scrollViewer == null)
            {
                return;
            }

            itemsPosition.Clear();

            scrollViewer.ViewChanged -= ScrollViewer_ViewChanged;
            scrollViewer.ViewChanged += ScrollViewer_ViewChanged;

            originDragPoint   = new Point(e.GetCurrentPoint(uiElement).Position.X, e.GetCurrentPoint(uiElement).Position.Y); // Initial drag point relative to the topleft corner
            prevSelectedItems = uiElement.SelectedItems.Cast <object>().ToList();                                            // Save current selected items

            var verticalOffset = scrollViewer.VerticalOffset;

            originDragPoint.Y += verticalOffset; // Initial drag point relative to the top of the list (considering scrolled offset)
            if (!e.GetCurrentPoint(uiElement).Properties.IsLeftButtonPressed || e.Pointer.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Touch)
            {
                // Trigger only on left click, do not trigger with touch
                return;
            }

            FetchItemsPosition();

            selectionStrategy = e.KeyModifiers.HasFlag(VirtualKeyModifiers.Control) ?
                                new InvertPreviousItemSelectionStrategy(uiElement.SelectedItems, prevSelectedItems) :
                                e.KeyModifiers.HasFlag(VirtualKeyModifiers.Shift) ?
                                (ItemSelectionStrategy) new ExtendPreviousItemSelectionStrategy(uiElement.SelectedItems, prevSelectedItems) :
                                new IgnorePreviousItemSelectionStrategy(uiElement.SelectedItems);

            selectionStrategy.HandleNoItemSelected();

            uiElement.PointerMoved -= RectangleSelection_PointerMoved;
            uiElement.PointerMoved += RectangleSelection_PointerMoved;
            if (selectionChanged != null)
            {
                // Unsunscribe from SelectionChanged event for performance
                uiElement.SelectionChanged -= selectionChanged;
            }
            uiElement.CapturePointer(e.Pointer);
            selectionState = SelectionState.Starting;
        }