Comment afficher des éléments Gridview de largeur variable dans Windows 8?

Mes éléments GridView ayant la taille de son first item size . Comment puis-je changer ce comportement?

Comment afficher les GridView items avec une Width variable en fonction du contenu?

entrez la description de l'image ici

Je veux montrer le premier mais j’obtiens le second.
Une suggestion pour faire ça?

Vérifiez Windows 8 GridView et les éléments de taille variable et les éléments de mosaïque de taille différente dans WinRT GridView et vérifiez également le modèle de grid de taille variable
J’espère que cette aide

Vous pouvez créer cette vue de GridView en définissant ItemsPanel sur WrapPanel , vous pouvez obtenir WrapPanel sur le blog de Jerry Nixon . Voici le code.

XAML

                    

C #

 protected override void OnNavigatedTo(NavigationEventArgs e) { var list = new List() { new ViewModel(110, Colors.LawnGreen), new ViewModel(50, Colors.DarkBlue), new ViewModel(130, Colors.Firebrick), new ViewModel(60, Colors.RosyBrown), new ViewModel(100, Colors.IndianRed), new ViewModel(210, Colors.BurlyWood), new ViewModel(150, Colors.Turquoise) }; gv.ItemsSource = list; } public class ViewModel { public double MyWidth { get; set; } public Color MyColor { get; set; } public ViewModel(double _MyWidth, Color _MyColor) { MyWidth = _MyWidth; MyColor = _MyColor; } } 

Voici ma solution.

// vue de grid de taille variable

 public class VariableSizedGridView : GridView { protected override void PrepareContainerForItemOverride(Windows.UI.Xaml.DependencyObject element, object item) { try { dynamic gridItem = item; var typeItem = item as CommonType; if (typeItem != null) { var heightPecentage = (300.0 / typeItem.WbmImage.PixelHeight); var itemWidth = typeItem.WbmImage.PixelWidth * heightPecentage; var columnSpan = Convert.ToInt32(itemWidth / 10.0); if (gridItem != null) { element.SetValue(VariableSizedWrapGrid.ItemWidthProperty, itemWidth); element.SetValue(VariableSizedWrapGrid.ColumnSpanProperty, columnSpan); element.SetValue(VariableSizedWrapGrid.RowSpanProperty, 1); } } } catch { element.SetValue(VariableSizedWrapGrid.ItemWidthProperty, 100); element.SetValue(VariableSizedWrapGrid.ColumnSpanProperty, 1); element.SetValue(VariableSizedWrapGrid.RowSpanProperty, 1); } finally { base.PrepareContainerForItemOverride(element, item); } } 

// Collection Voir le source

   

// vue de grid de taille variable xaml