如何在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