13
13
using Microsoft . UI . Xaml . Controls ;
14
14
using Microsoft . UI . Xaml . Controls . Primitives ;
15
15
using Microsoft . UI . Xaml . Input ;
16
+ using Microsoft . UI . Xaml . Media ;
16
17
using Microsoft . UI . Xaml . Navigation ;
17
18
using System ;
18
19
using System . Collections . Generic ;
@@ -33,12 +34,43 @@ public sealed partial class ColumnViewBase : BaseLayout
33
34
34
35
protected override ItemsControl ItemsControl => FileList ;
35
36
37
+ private ColumnViewBrowser ? columnsOwner ;
38
+ private ListViewItem ? openedFolderPresenter ;
39
+
36
40
public ColumnViewBase ( ) : base ( )
37
41
{
38
42
this . InitializeComponent ( ) ;
39
43
var selectionRectangle = RectangleSelection . Create ( FileList , SelectionRectangle , FileList_SelectionChanged ) ;
40
44
selectionRectangle . SelectionEnded += SelectionRectangle_SelectionEnded ;
41
45
tapDebounceTimer = DispatcherQueue . CreateTimer ( ) ;
46
+ this . ItemInvoked += ColumnViewBase_ItemInvoked ;
47
+ this . GotFocus += ColumnViewBase_GotFocus ;
48
+ }
49
+
50
+ private void ColumnViewBase_GotFocus ( object sender , RoutedEventArgs e )
51
+ {
52
+ if ( FileList . SelectedItem == null && openedFolderPresenter != null )
53
+ {
54
+ openedFolderPresenter . Focus ( FocusState . Programmatic ) ;
55
+ FileList . SelectedItem = FileList . ItemFromContainer ( openedFolderPresenter ) ;
56
+ }
57
+ }
58
+
59
+ private void ColumnViewBase_ItemInvoked ( object ? sender , EventArgs e )
60
+ {
61
+ ClearOpenedFolderSelectionIndicator ( ) ;
62
+ openedFolderPresenter = FileList . ContainerFromItem ( FileList . SelectedItem ) as ListViewItem ;
63
+ }
64
+
65
+ private void ClearOpenedFolderSelectionIndicator ( )
66
+ {
67
+ if ( openedFolderPresenter is null )
68
+ return ;
69
+
70
+ openedFolderPresenter . Background = new SolidColorBrush ( Microsoft . UI . Colors . Transparent ) ;
71
+ var presenter = openedFolderPresenter . FindDescendant < Grid > ( ) ! ;
72
+ presenter ! . Background = new SolidColorBrush ( Microsoft . UI . Colors . Transparent ) ;
73
+ openedFolderPresenter = null ;
42
74
}
43
75
44
76
protected override void HookEvents ( )
@@ -148,7 +180,10 @@ protected override void UnhookEvents()
148
180
protected override void OnNavigatedTo ( NavigationEventArgs eventArgs )
149
181
{
150
182
if ( eventArgs . Parameter is NavigationArguments navArgs )
183
+ {
151
184
navArgs . FocusOnNavigation = ( navArgs . AssociatedTabInstance as ColumnShellPage ) ? . ColumnParams ? . Column == 0 ; // Focus filelist only if first column
185
+ columnsOwner = ( navArgs . AssociatedTabInstance as FrameworkElement ) ? . FindAscendant < ColumnViewBrowser > ( ) ;
186
+ }
152
187
153
188
base . OnNavigatedTo ( eventArgs ) ;
154
189
@@ -296,6 +331,7 @@ public override void Dispose()
296
331
base . Dispose ( ) ;
297
332
UnhookEvents ( ) ;
298
333
CommandsViewModel ? . Dispose ( ) ;
334
+ columnsOwner = null ;
299
335
}
300
336
301
337
#endregion IDisposable
@@ -306,8 +342,21 @@ private async void FileList_SelectionChanged(object sender, SelectionChangedEven
306
342
307
343
if ( SelectedItems . Count == 1 && App . AppModel . IsQuickLookAvailable )
308
344
await QuickLookHelpers . ToggleQuickLook ( ParentShellPageInstance , true ) ;
345
+
346
+ if ( e != null )
347
+ {
348
+ if ( e . AddedItems . Count > 0 )
349
+ columnsOwner ? . HandleSelectionChange ( this ) ;
350
+
351
+ if ( e . RemovedItems . Count > 0 && openedFolderPresenter != null )
352
+ {
353
+ var presenter = openedFolderPresenter . FindDescendant < Grid > ( ) ! ;
354
+ presenter ! . Background = this . Resources [ "ListViewItemBackgroundSelected" ] as SolidColorBrush ;
355
+ }
356
+ }
309
357
}
310
358
359
+
311
360
private void FileList_RightTapped ( object sender , RightTappedRoutedEventArgs e )
312
361
{
313
362
if ( ! IsRenamingItem )
@@ -404,6 +453,8 @@ private async void FileList_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
404
453
405
454
var currentBladeIndex = ( ParentShellPageInstance is ColumnShellPage associatedColumnShellPage ) ? associatedColumnShellPage . ColumnParams . Column : 0 ;
406
455
this . FindAscendant < ColumnViewBrowser > ( ) ? . MoveFocusToPreviousBlade ( currentBladeIndex ) ;
456
+ FileList . SelectedItem = null ;
457
+ ClearOpenedFolderSelectionIndicator ( ) ;
407
458
e . Handled = true ;
408
459
}
409
460
else if ( e . Key == VirtualKey . Right ) // Right arrow: switch focus to next column
@@ -499,6 +550,7 @@ private void FileList_ItemTapped(object sender, TappedRoutedEventArgs e)
499
550
var shiftPressed = InputKeyboardSource . GetKeyStateForCurrentThread ( VirtualKey . Shift ) . HasFlag ( CoreVirtualKeyStates . Down ) ;
500
551
var item = ( e . OriginalSource as FrameworkElement ) ? . DataContext as ListedItem ;
501
552
553
+
502
554
// Allow for Ctrl+Shift selection
503
555
if ( ctrlPressed || shiftPressed )
504
556
return ;
@@ -568,5 +620,10 @@ protected override void BaseFolderSettings_LayoutModeChangeRequested(object send
568
620
break ;
569
621
}
570
622
}
623
+
624
+ internal void ClearSelectionIndicator ( )
625
+ {
626
+ FileList . SelectedItem = null ;
627
+ }
571
628
}
572
629
}
0 commit comments