@@ -639,6 +639,47 @@ private void SelectionCheckbox_PointerCanceled(object sender, PointerRoutedEvent
639
639
UpdateCheckboxVisibility ( ( sender as FrameworkElement ) ! . FindAscendant < GridViewItem > ( ) ! , false ) ;
640
640
}
641
641
642
+ // To avoid crashes, disable scrolling when drag-and-drop if grouped. (#14484)
643
+ protected override void FileList_DragItemsStarting ( object sender , DragItemsStartingEventArgs e )
644
+ {
645
+ if ( ParentShellPageInstance ? . FilesystemViewModel . FilesAndFolders . IsGrouped ?? false )
646
+ ScrollViewer . SetVerticalScrollMode ( FileList , ScrollMode . Disabled ) ;
647
+
648
+ base . FileList_DragItemsStarting ( sender , e ) ;
649
+
650
+ if ( ParentShellPageInstance ? . FilesystemViewModel . FilesAndFolders . IsGrouped ?? false &&
651
+ e . Cancel )
652
+ ScrollViewer . SetVerticalScrollMode ( FileList , ScrollMode . Auto ) ;
653
+ }
654
+
655
+ private void ItemsLayout_DragEnter ( object sender , DragEventArgs e )
656
+ {
657
+ if ( ParentShellPageInstance ? . FilesystemViewModel . FilesAndFolders . IsGrouped ?? false )
658
+ ScrollViewer . SetVerticalScrollMode ( FileList , ScrollMode . Disabled ) ;
659
+ }
660
+
661
+ private void ItemsLayout_DragLeave ( object sender , DragEventArgs e )
662
+ {
663
+ if ( ParentShellPageInstance ? . FilesystemViewModel . FilesAndFolders . IsGrouped ?? false )
664
+ ScrollViewer . SetVerticalScrollMode ( FileList , ScrollMode . Auto ) ;
665
+ }
666
+
667
+ protected override void ItemsLayout_Drop ( object sender , DragEventArgs e )
668
+ {
669
+ if ( ParentShellPageInstance ? . FilesystemViewModel . FilesAndFolders . IsGrouped ?? false )
670
+ ScrollViewer . SetVerticalScrollMode ( FileList , ScrollMode . Auto ) ;
671
+
672
+ base . ItemsLayout_Drop ( sender , e ) ;
673
+ }
674
+
675
+ protected override void Item_Drop ( object sender , DragEventArgs e )
676
+ {
677
+ if ( ParentShellPageInstance ? . FilesystemViewModel . FilesAndFolders . IsGrouped ?? false )
678
+ ScrollViewer . SetVerticalScrollMode ( FileList , ScrollMode . Auto ) ;
679
+
680
+ base . Item_Drop ( sender , e ) ;
681
+ }
682
+
642
683
private void UpdateCheckboxVisibility ( object sender , bool isPointerOver )
643
684
{
644
685
if ( sender is GridViewItem control && control . FindDescendant < UserControl > ( ) is UserControl userControl )
0 commit comments