如何在Windows 8中显示宽度可变的Gridview项目?

我的GridView项目的大小是它的first item size 。 我该如何改变这种行为?

如何根据内容显示具有可变Width GridView items

在此处输入图像描述

我想展示第一个,但我得到第二个。
有什么建议吗?

检查WinRT GridView中的 Windows 8 GridView和可变大小的项目以及不同大小的平铺项目 ,还检查可变大小的网格模板
希望这有帮助

你可以通过将ItemsPanel设置为WrapPanel来创建GridView的这种视图,你可以在Jerry Nixon的博客上获得WrapPanel 。 这是代码。

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; } } 

这是我的解决方案。

//可变大小的网格视图

 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); } } 

//集合查看源代码

   

//可变大小的网格视图xaml