6

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

如何根据内容显示GridView items变量Width


在此处输入图像描述

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

4

3 回答 3

3

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

于 2013-06-13T12:08:28.493 回答
3

GridView您可以通过设置ItemsPanel来创建这样的视图WrapPanel,您可以WrapPanel访问Jerry Nixon 的博客。这是代码。

XAML

<GridView x:Name="gv">
    <GridView.ItemsPanel>
        <ItemsPanelTemplate>
            <local:WrapPanel Orientation="Horizontal"  />
        </ItemsPanelTemplate>
    </GridView.ItemsPanel>
    <GridView.ItemTemplate>
        <DataTemplate>
            <Grid Height="140" Width="{Binding MyWidth}">
                <Grid.Background>
                    <SolidColorBrush Color="{Binding MyColor}" />
                </Grid.Background>
                <TextBlock FontSize="20" VerticalAlignment="Bottom" Margin="10,0,0,10">
                    <Run Text="{Binding MyWidth}" />
                </TextBlock>
            </Grid>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

C#

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    var list = new List<ViewModel>() 
    {
        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;
    }
}
于 2013-06-13T12:08:41.263 回答
1

这是我的解决方案。

//可变大小的网格视图

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

//采集查看源码

     <CollectionViewSource  x:Name="collectionViewSource"
                           Source="{Binding ImageList,Mode=TwoWay}"
                           IsSourceGrouped="False"
                           ItemsPath="Items" />   

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

     <controls:VariableSizedGridView x:Name="ImageGridView"
                      AutomationProperties.AutomationId="ImageGridView"                            
                      ItemsSource="{Binding Source={StaticResource collectionViewSource}}" 
                      IsItemClickEnabled="True"
                      TabIndex="1" >
     <controls:VariableSizedGridView.ItemTemplate>
     <DataTemplate>
    <Grid Height="300" >
        <Image Stretch="Uniform" Source="{Binding WbmImage}" />
    </Grid>
    </DataTemplate>
    </controls:VariableSizedGridView.ItemTemplate>
                <controls:VariableSizedGridView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <VariableSizedWrapGrid  ItemWidth="10"   ItemHeight="300" Orientation="Vertical"/>
                    </ItemsPanelTemplate>
                </controls:VariableSizedGridView.ItemsPanel>                  
    </controls:VariableSizedGridView>
于 2013-06-14T05:48:54.880 回答