@@ -1206,6 +1206,7 @@ protected void FileList_ContainerContentChanging(ListViewBase sender, ContainerC
12061206
12071207 private void RefreshContainer ( SelectorItem container , bool inRecycleQueue )
12081208 {
1209+ container . Loaded -= FileListItem_Loaded ;
12091210 container . PointerPressed -= FileListItem_PointerPressed ;
12101211 container . PointerEntered -= FileListItem_PointerEntered ;
12111212 container . PointerExited -= FileListItem_PointerExited ;
@@ -1219,6 +1220,7 @@ private void RefreshContainer(SelectorItem container, bool inRecycleQueue)
12191220 }
12201221 else
12211222 {
1223+ container . Loaded += FileListItem_Loaded ;
12221224 container . PointerPressed += FileListItem_PointerPressed ;
12231225 container . PointerEntered += FileListItem_PointerEntered ;
12241226 container . PointerExited += FileListItem_PointerExited ;
@@ -1235,10 +1237,12 @@ private void RefreshItem(SelectorItem container, object item, bool inRecycleQueu
12351237
12361238 if ( inRecycleQueue )
12371239 {
1240+ UpdateItemToolTip ( container , null ) ;
12381241 ParentShellPageInstance ! . ShellViewModel . CancelExtendedPropertiesLoadingForItem ( listedItem ) ;
12391242 }
12401243 else
12411244 {
1245+ UpdateItemToolTip ( container , listedItem . ItemTooltipText ) ;
12421246 InitializeDrag ( container , listedItem ) ;
12431247
12441248 if ( listedItem . PreloadedIconData is not null && listedItem . FileImage is null )
@@ -1257,6 +1261,32 @@ private void RefreshItem(SelectorItem container, object item, bool inRecycleQueu
12571261 }
12581262 }
12591263
1264+ private static void UpdateItemToolTip ( SelectorItem container , string ? tooltipText )
1265+ {
1266+ // Apply the tooltip to both the container and the realized template root so every layout
1267+ // gets the same behavior, even when the DataTemplate is wrapped in a UserControl.
1268+ UpdateItemToolTip ( container as FrameworkElement , tooltipText ) ;
1269+
1270+ if ( container . ContentTemplateRoot is FrameworkElement contentTemplateRoot )
1271+ UpdateItemToolTip ( contentTemplateRoot , tooltipText ) ;
1272+ }
1273+
1274+ private static void UpdateItemToolTip ( FrameworkElement ? target , string ? tooltipText )
1275+ {
1276+ if ( target is null )
1277+ return ;
1278+
1279+ ToolTipService . SetToolTip ( target , tooltipText ) ;
1280+ target . SetValue ( ToolTipService . PlacementProperty , PlacementMode . Mouse ) ;
1281+ }
1282+
1283+ private void FileListItem_Loaded ( object sender , RoutedEventArgs e )
1284+ {
1285+ // Set the initial tooltip before hover starts so WinUI doesn't miss the first dwell.
1286+ if ( sender is SelectorItem container && container . Content is ListedItem listedItem )
1287+ UpdateItemToolTip ( container , listedItem . ItemTooltipText ) ;
1288+ }
1289+
12601290 private static async Task ApplyPreloadedIconAsync ( ListedItem item )
12611291 {
12621292 var image = await item . PreloadedIconData . ToBitmapAsync ( ) ;
@@ -1299,6 +1329,9 @@ protected internal void FileListItem_PointerEntered(object sender, PointerRouted
12991329 if ( sender is SelectorItem selectorItem && selectorItem . IsSelected )
13001330 MainWindow . Instance . SetCanWindowToFront ( false ) ;
13011331
1332+ if ( sender is SelectorItem tooltipContainer && tooltipContainer . Content is ListedItem listedItem )
1333+ UpdateItemToolTip ( tooltipContainer , listedItem . ItemTooltipText ) ;
1334+
13021335 if ( ! UserSettingsService . FoldersSettingsService . SelectFilesOnHover )
13031336 return ;
13041337
0 commit comments