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