private void ScrollingHost_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e) { var scrollingHost = Stickers.ItemsPanelRoot as ItemsWrapGrid; if (scrollingHost != null && Pivot.SelectedIndex == 2) { var first = Stickers.ContainerFromIndex(scrollingHost.FirstVisibleIndex); if (first != null) { var header = Stickers.GroupHeaderContainerFromItemContainer(first) as GridViewHeaderItem; if (header != null && header != Toolbar.SelectedItem) { Toolbar.SelectedItem = header.Content; Toolbar.ScrollIntoView(header.Content); } } } }
private async void LoadVisibleStickers() { var scrollingHost = Stickers.ItemsPanelRoot as ItemsWrapGrid; if (scrollingHost == null) { return; } if (scrollingHost.FirstVisibleIndex < 0) { return; } var lastSet = 0L; for (int i = scrollingHost.FirstVisibleIndex; i <= scrollingHost.LastVisibleIndex; i++) { if (i >= Stickers.Items.Count) { return; } var first = Stickers.Items[i] as ViewModels.Dialogs.StickerViewModel; if (first == null || first.SetId == lastSet) { continue; } lastSet = first.SetId; var fromItem = Stickers.ContainerFromItem(first); if (fromItem == null) { continue; } var header = Stickers.GroupHeaderContainerFromItemContainer(fromItem) as GridViewHeaderItem; if (header == null) { continue; } var group = header.Content as ViewModels.Dialogs.StickerSetViewModel; if (group == null || group.IsLoaded) { continue; } group.IsLoaded = true; Debug.WriteLine("Loading sticker set " + group.Id); var response = await ViewModel.ProtoService.SendAsync(new GetStickerSet(group.Id)); if (response is StickerSet full) { group.Update(full); //group.Stickers.RaiseCollectionChanged(new System.Collections.Specialized.NotifyCollectionChangedEventArgs(System.Collections.Specialized.NotifyCollectionChangedAction.Reset)); int j = 0; foreach (var sticker in group.Stickers) { if (sticker.Thumbnail == null) { continue; } //group.Stickers.RaiseCollectionChanged(new System.Collections.Specialized.NotifyCollectionChangedEventArgs(System.Collections.Specialized.NotifyCollectionChangedAction.Move, sticker, j, j)); //j++; var container = Stickers.ContainerFromItem(sticker) as SelectorItem; if (container == null) { continue; } var content = container.ContentTemplateRoot as Image; var file = sticker.Thumbnail.Photo; if (file.Local.IsDownloadingCompleted) { var temp = await StorageFile.GetFileFromPathAsync(file.Local.Path); var buffer = await FileIO.ReadBufferAsync(temp); content.Source = WebPImage.DecodeFromBuffer(buffer); } else if (file.Local.CanBeDownloaded && !file.Local.IsDownloadingActive) { DownloadFile(file.Id, sticker); } } } } }