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

C# 如何在Windows 8中显示宽度可变的Gridview项目?,c#,gridview,windows-8,windows-runtime,winrt-xaml,C#,Gridview,Windows 8,Windows Runtime,Winrt Xaml,我的GridView项目的大小为第一个项目的大小。如何改变这种行为 如何根据内容使用变量宽度显示GridView项目 我想显示第一个,但我得到了第二个。有什么建议吗?检查并同时检查希望这有帮助您可以通过将ItemsPanel设置为WrapPanel来创建这样的GridView视图,您可以打开WrapPanel。这是密码 XAML C# 受保护的覆盖无效OnNavigatedTo(NavigationEventArgs e) { var list=新列表() { 新的ViewModel(11

我的GridView项目的大小为第一个项目的大小。如何改变这种行为

如何根据内容使用变量
宽度
显示
GridView项目



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

检查并同时检查
希望这有帮助

您可以通过将
ItemsPanel
设置为
WrapPanel
来创建这样的
GridView
视图,您可以打开
WrapPanel
。这是密码

XAML


C#

受保护的覆盖无效OnNavigatedTo(NavigationEventArgs e)
{
var list=新列表()
{
新的ViewModel(110,彩色,LawnGreen),
新的ViewModel(50种颜色,深蓝色),
新的ViewModel(130,彩色,耐火砖),
新ViewModel(60种颜色,RosyBrown),
新ViewModel(100种颜色,印度红),
新的ViewModel(210,颜色:BurlyWood),
新ViewModel(150种颜色,绿松石色)
};
gv.ItemsSource=列表;
}
公共类视图模型
{
公共双MyWidth{get;set;}
公共颜色MyColor{get;set;}
公共视图模型(双色_MyWidth,彩色_MyColor)
{
我的宽度=_我的宽度;
MyColor=\u 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);
        }
    }
//集合视图源

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


可能会有帮助@Xyroid谢谢,但您提供了分组gridview的链接。我正在寻找没有分组的GridView本身。好的,我将发布解决方案。嗨,这个链接帮助我找到了简单的解决方案嗨,这个链接帮助我找到了简单的解决方案
     <CollectionViewSource  x:Name="collectionViewSource"
                           Source="{Binding ImageList,Mode=TwoWay}"
                           IsSourceGrouped="False"
                           ItemsPath="Items" />   
     <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>