@@ -29,8 +29,8 @@ public sealed partial class TabBar : BaseTabBar
2929
3030 public UIElement FooterElement
3131 {
32- get => ( UIElement ) GetValue ( FooterElementProperty ) ;
33- set => SetValue ( FooterElementProperty , value ) ;
32+ get => ( UIElement ) GetValue ( FooterElementProperty ) ;
33+ set => SetValue ( FooterElementProperty , value ) ;
3434 }
3535
3636 public static readonly DependencyProperty TabStripVisibilityProperty =
@@ -56,6 +56,12 @@ public bool AllowTabsDrag
5656 public Rectangle DragArea
5757 => DragAreaRectangle ;
5858
59+ /// <summary> Starting position when dragging a tab.</summary>
60+ private InteropHelpers . POINT dragStartPoint ;
61+
62+ /// <summary> Starting time when dragging a tab. </summary>
63+ private DateTimeOffset dragStartTime ;
64+
5965 public TabBar ( )
6066 {
6167 InitializeComponent ( ) ;
@@ -136,6 +142,9 @@ private void TabView_TabDragStarting(TabView sender, TabViewTabDragStartingEvent
136142 var tabViewItemArgs = ( args . Item as TabBarItem ) . NavigationParameter ;
137143 args . Data . Properties . Add ( TabPathIdentifier , tabViewItemArgs . Serialize ( ) ) ;
138144 args . Data . RequestedOperation = DataPackageOperation . Move ;
145+
146+ InteropHelpers . GetCursorPos ( out dragStartPoint ) ;
147+ dragStartTime = DateTimeOffset . UtcNow ;
139148 }
140149
141150 private void TabView_TabStripDragOver ( object sender , DragEventArgs e )
@@ -211,14 +220,20 @@ private void TabView_TabDragCompleted(TabView sender, TabViewTabDragCompletedEve
211220
212221 private async void TabView_TabDroppedOutside ( TabView sender , TabViewTabDroppedOutsideEventArgs args )
213222 {
214- if ( sender . TabItems . Count == 1 )
215- {
223+ InteropHelpers . GetCursorPos ( out var droppedPoint ) ;
224+ var droppedTime = DateTimeOffset . UtcNow ;
225+ var dragTime = droppedTime - dragStartTime ;
226+ var dragDistance = Math . Sqrt ( Math . Pow ( ( dragStartPoint . X - droppedPoint . X ) , 2 ) + Math . Pow ( ( dragStartPoint . Y - droppedPoint . Y ) , 2 ) ) ;
227+
228+ if ( sender . TabItems . Count == 1 ||
229+ ( dragTime . TotalSeconds < 1 &&
230+ dragDistance < 100 ) )
216231 return ;
217- }
218232
219233 var indexOfTabViewItem = sender . TabItems . IndexOf ( args . Item ) ;
220234 var tabViewItemArgs = ( args . Item as TabBarItem ) . NavigationParameter ;
221235 var selectedTabViewItemIndex = sender . SelectedIndex ;
236+
222237 Items . Remove ( args . Item as TabBarItem ) ;
223238 if ( ! await NavigationHelpers . OpenTabInNewWindowAsync ( tabViewItemArgs . Serialize ( ) ) )
224239 {
0 commit comments