Skip to content
This repository was archived by the owner on Nov 29, 2022. It is now read-only.

Commit eb42b4b

Browse files
Add positioning dragged tab in the proper position.
1 parent 7e4a2db commit eb42b4b

File tree

1 file changed

+41
-21
lines changed

1 file changed

+41
-21
lines changed

Diff for: TabViewTear/Views/MainPage.xaml.cs

+41-21
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Newtonsoft.Json;
1+
using Microsoft.Toolkit.Uwp.UI.Controls;
2+
using Newtonsoft.Json;
23
using System;
34
using System.Collections.ObjectModel;
45
using System.ComponentModel;
@@ -61,7 +62,7 @@ protected override void OnNavigatedTo(NavigationEventArgs e)
6162

6263
private MessageEventArgs _lastMsg;
6364

64-
private async void OnViewLifetimeControlMessageReceived(object sender, MessageEventArgs e)
65+
private void OnViewLifetimeControlMessageReceived(object sender, MessageEventArgs e)
6566
{
6667
_lastMsg = e; // Store to complete in DragItemsCompleted.
6768
}
@@ -149,25 +150,34 @@ private void Items_Drop(object sender, DragEventArgs e)
149150

150151
if (data != null)
151152
{
152-
//var minpos = pos;
153-
//var mindist = 1000.0;
154-
//var minindex = -1;
155-
//foreach (var item in Items.Items)
156-
//{
157-
// var tab = Items.ContainerFromItem(item);
158-
// var p = e.GetPosition(tab as UIElement);
159-
// var amt = Math.Abs(p.X - minpos.X) + Math.Abs(p.Y - minpos.Y);
160-
// if (amt < mindist)
161-
// {
162-
// minindex = Items.IndexFromContainer(tab);
163-
// mindist = amt;
164-
// minpos = p;
165-
// }
166-
//}
167-
168-
169-
// TODO: Figure out how to insert this in the right place.
170-
TabItems.Add(data);
153+
// First we need to get the position in the List to drop to
154+
var listview = sender as TabView;
155+
var index = -1;
156+
157+
// Determine which items in the list our pointer is inbetween.
158+
for (int i = 0; i < listview.Items.Count; i++)
159+
{
160+
var item = listview.ContainerFromIndex(i) as TabViewItem;
161+
162+
var p = e.GetPosition(item);
163+
164+
if (p.X - item.ActualWidth < 0)
165+
{
166+
index = i;
167+
break;
168+
}
169+
}
170+
171+
if (index < 0)
172+
{
173+
// We didn't find a transition point, so we're at the end of the list
174+
TabItems.Add(data);
175+
}
176+
else if (index < listview.Items.Count)
177+
{
178+
// Otherwise, insert at the provided index.
179+
TabItems.Insert(index, data);
180+
}
171181

172182
Items.SelectedItem = data; // Select new item.
173183

@@ -237,6 +247,16 @@ private void InitializeTestData()
237247
Title = "Item 4",
238248
Content = "Nullam sollicitudin magna dui, imperdiet vulputate arcu pharetra eu. Vivamus lobortis lectus ut diam pretium, ut fermentum est malesuada. Sed eget pretium nisi. Cras eget vestibulum purus. Vivamus tincidunt luctus maximus. Cras erat enim, molestie sit amet tortor sit amet, porttitor tincidunt neque. Nam malesuada odio justo, sed sagittis tellus mollis in. Proin congue enim quis libero faucibus, eu condimentum dolor convallis. Mauris blandit ipsum sit amet maximus convallis. Integer porta dolor id purus hendrerit, a semper mi blandit. In malesuada lacus a tellus interdum, vel consequat turpis molestie. Curabitur eget venenatis massa."
239249
});
250+
TabItems.Add(new DataItem()
251+
{
252+
Title = "Item 5",
253+
Content = "Etiam egestas, tellus ut molestie cursus, odio eros accumsan nulla, ut tempor libero nisi a ante. Sed posuere, velit id dictum lobortis, magna lorem dapibus urna, vitae mattis tellus libero et ligula. Praesent vel orci vehicula, accumsan ipsum ac, venenatis erat. Vestibulum consequat nulla eget arcu accumsan, tempus condimentum nulla euismod. Cras mattis tellus tortor, vitae vulputate lectus vulputate ac. Nunc nisl est, porttitor vitae diam a, pulvinar faucibus augue. Morbi vitae bibendum sem, non porta dolor. Cras turpis sem, rhoncus eget ultrices a, pretium venenatis libero. Fusce convallis eu sapien eu imperdiet. Nullam pulvinar ante a lobortis commodo. Aenean at est vel est faucibus efficitur in eget turpis. In efficitur bibendum dolor vitae dapibus. Mauris dapibus risus sit amet lectus ornare, et eleifend urna pretium. Integer non semper nibh, sit amet bibendum nulla. Nulla facilisi."
254+
});
255+
TabItems.Add(new DataItem()
256+
{
257+
Title = "Item 6",
258+
Content = "Integer in pulvinar justo, non venenatis leo. Nam quis pulvinar libero, id laoreet elit. Nunc vehicula vitae lectus et venenatis. Etiam et porta dui. Nulla rutrum lacinia dolor. Nullam convallis libero eget nisi tristique, quis convallis enim finibus. Suspendisse consectetur lorem eleifend sem venenatis ultrices. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nunc ligula urna, aliquam vitae est a, dictum gravida nulla. Sed eu vestibulum nisl. Phasellus rhoncus volutpat mauris, vitae semper quam molestie et. Fusce mattis turpis a congue maximus. Suspendisse justo dui, varius non metus vel, euismod pretium velit."
259+
});
240260
}
241261
}
242262
}

0 commit comments

Comments
 (0)