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?
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