Просмотр исходного кода

fix: Tooltip 在文本区域长按左键时自动收回

龙腾猫跃 4 месяцев назад
Родитель
Сommit
4f44549354
1 измененных файлов с 13 добавлено и 0 удалено
  1. 13 0
      Wpf/Controls/ModernTooltipService.cs

+ 13 - 0
Wpf/Controls/ModernTooltipService.cs

@@ -111,15 +111,28 @@ public static class ModernTooltipService {
         if (sender is not FrameworkElement owner || !ReferenceEquals(owner, currentOwner)) return;
 
         lastMousePoint = e.GetPosition(owner);
+        if (e.LeftButton == MouseButtonState.Pressed && !IsPointInside(owner, lastMousePoint)) {
+            Close(true);
+            return;
+        }
+
         if (GetFollowMouse(owner) && popup is { IsOpen: true }) UpdatePosition(owner, lastMousePoint);
     }
 
     private static void OnMouseLeave(object sender, MouseEventArgs e) {
         if (sender is not FrameworkElement owner || !ReferenceEquals(owner, currentOwner)) return;
 
+        // 避免 Tooltip 在文本区域长按左键时自动收回
+        var point = e.GetPosition(owner);
+        if (e.LeftButton == MouseButtonState.Pressed && IsPointInside(owner, point)) return;
+
         Close(true);
     }
 
+    private static bool IsPointInside(FrameworkElement owner, Point point) {
+        return point.X >= 0 && point.Y >= 0 && point.X <= owner.ActualWidth && point.Y <= owner.ActualHeight;
+    }
+
     #endregion
 
     #region Tooltip 生命周期