private async void OnDrop(object sender, DragEventArgs e) { var data = (e.OriginalSource as FrameworkElement)?.DataContext; if (data == null) { var items = await e.DataView.GetStorageItemsAsync(); var files = await FileOpen.GetAllFiles(items); List <string> _completed = new List <string>(); foreach (var cue in _failedItems) { if (await FileOpen.HandleCueFileOpen(cue.Value, files, Added) == null) { _completed.Add(cue.Key); } } foreach (var str in _completed) { _failedItems.Remove(str); _items.Remove((from i in _items where string.Compare(i.FullPath, str, true) == 0 select i).First()); } if (_failedItems.Count == 0) { Hide(); } } }
private async void OnPlayItemsListViewDrop(object sender, DragEventArgs e) { IEnumerable <MusicPlaybackItem> addItems = null; if (e.DataView.Contains(StandardDataFormats.StorageItems)) { var items = await e.DataView.GetStorageItemsAsync(); addItems = await FileOpen.GetPlaybackItemsFromFilesAsync( await FileOpen.GetAllFiles(items)); } else if (e.DataView.Contains(StandardDataFormats.Text)) { var items = DragHelper.Get(await e.DataView.GetTextAsync()); if (items is Playlist) { var list = items as Playlist; addItems = from i in list.Items select MusicPlaybackItem.CreateFromMediaFile(i.ToMediaFile()); } else if (items is PlaylistItem) { addItems = new MusicPlaybackItem[] { MusicPlaybackItem.CreateFromMediaFile( (items as PlaylistItem).ToMediaFile()) }; } else if (items is IEnumerable <DbMediaFile> ) { addItems = from i in items as IEnumerable <DbMediaFile> select MusicPlaybackItem.CreateFromMediaFile(i); } else if (items is DbMediaFile) { addItems = new MusicPlaybackItem[] { MusicPlaybackItem.CreateFromMediaFile(items as DbMediaFile) }; } } if (addItems != null) { var targetListView = sender as ListView; if (targetListView == null) { return; } targetListView.Background = null; Border border = VisualTreeHelper.GetChild(targetListView, 0) as Border; ScrollViewer scrollViewer = border.Child as ScrollViewer; var droppedPosition = e.GetPosition(targetListView).Y + scrollViewer.VerticalOffset; var itemsSource = targetListView.ItemsSource as IList; var highWaterMark = 3d; // 3px of padding var dropIndex = 0; var foundDropLocation = false; for (int i = 0; i < itemsSource.Count && !foundDropLocation; i++) { var itemContainer = (ListViewItem)targetListView.ContainerFromIndex(i); if (itemContainer != null) { highWaterMark = highWaterMark + itemContainer.ActualHeight; } if (droppedPosition <= highWaterMark) { dropIndex = i; foundDropLocation = true; } } if (foundDropLocation) { await Core.PlaybackControl.Instance.AddFile(addItems, dropIndex); } else { await Core.PlaybackControl.Instance.AddFile(addItems); } } }