private void OnChoosingItemContainer(ListViewBase sender, ChoosingItemContainerEventArgs args) { if (args.ItemContainer == null) { if (sender.ItemsPanel == VerticalStack) { args.ItemContainer = new ListViewItem(); } else { args.ItemContainer = new GridViewItem { Margin = new Thickness(2) }; } if (sender.ItemTemplateSelector != null) { args.ItemContainer.ContentTemplate = sender.ItemTemplateSelector.SelectTemplate(args.Item, args.ItemContainer); } else { args.ItemContainer.ContentTemplate = sender.ItemTemplate; } args.ItemContainer.HorizontalContentAlignment = HorizontalAlignment.Stretch; args.ItemContainer.VerticalContentAlignment = VerticalAlignment.Stretch; _zoomer.ElementPrepared(args.ItemContainer); } args.IsContainerPrepared = true; }
private void OnChoosingItemContainer(ListViewBase sender, ChoosingItemContainerEventArgs args) { var typeName = args.Item is Sticker sticker && sticker.IsAnimated ? "AnimatedItemTemplate" : "ItemTemplate"; var relevantHashSet = _typeToItemHashSetMapping[typeName]; // args.ItemContainer is used to indicate whether the ListView is proposing an // ItemContainer (ListViewItem) to use. If args.Itemcontainer != null, then there was a // recycled ItemContainer available to be reused. if (args.ItemContainer != null) { if (args.ItemContainer.Tag.Equals(typeName)) { // Suggestion matches what we want, so remove it from the recycle queue relevantHashSet.Remove(args.ItemContainer); } else { // The ItemContainer's datatemplate does not match the needed // datatemplate. // Don't remove it from the recycle queue, since XAML will resuggest it later args.ItemContainer = null; } } // If there was no suggested container or XAML's suggestion was a miss, pick one up from the recycle queue // or create a new one if (args.ItemContainer == null) { // See if we can fetch from the correct list. if (relevantHashSet.Count > 0) { // Unfortunately have to resort to LINQ here. There's no efficient way of getting an arbitrary // item from a hashset without knowing the item. Queue isn't usable for this scenario // because you can't remove a specific element (which is needed in the block above). args.ItemContainer = relevantHashSet.First(); relevantHashSet.Remove(args.ItemContainer); } else { // There aren't any (recycled) ItemContainers available. So a new one // needs to be created. var item = new GridViewItem(); item.ContentTemplate = _typeToTemplateMapping[typeName]; item.Style = sender.ItemContainerStyle; item.Tag = typeName; args.ItemContainer = item; _zoomer.ElementPrepared(args.ItemContainer); } } // Indicate to XAML that we picked a container for it args.IsContainerPrepared = true; }
private void OnChoosingItemContainer(ListViewBase sender, ChoosingItemContainerEventArgs args) { if (args.ItemContainer == null) { args.ItemContainer = new GridViewItem(); args.ItemContainer.ContentTemplate = sender.ItemTemplate; args.ItemContainer.Style = sender.ItemContainerStyle; _zoomer.ElementPrepared(args.ItemContainer); } args.IsContainerPrepared = true; }
private void OnChoosingItemContainer(ListViewBase sender, ChoosingItemContainerEventArgs args) { if (args.ItemContainer == null) { args.ItemContainer = new GridViewItem(); args.ItemContainer.Style = sender.ItemContainerStyle; args.ItemContainer.ContentTemplate = sender.ItemTemplate; args.ItemContainer.ContextRequested += Sticker_ContextRequested; if (ApiInfo.IsFullExperience || Windows.UI.ViewManagement.UIViewSettings.GetForCurrentView().UserInteractionMode == Windows.UI.ViewManagement.UserInteractionMode.Mouse) { _zoomer.ElementPrepared(args.ItemContainer); } } args.IsContainerPrepared = true; }