GridView中的可变大小的GridViewItem

时间:2013-08-10 18:49:46

标签: c# xaml gridview windows-8 winrt-xaml

在GridView(Windows 8应用程序)中,我使用以下项目模板来显示项目:

<DataTemplate x:Key="ProjectTemplate">
    <Grid Width="500" Background="MidnightBlue">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="0" Text="{Binding Name}" Margin="20, 10" Style="{StaticResource SubheaderTextStyle}" TextWrapping="Wrap" Foreground="WhiteSmoke"/>
        <StackPanel Grid.Row="1" Orientation="Horizontal" Margin="20, 10, 10, 10" Background="MidnightBlue">
            <TextBlock Text="Last Modified :" Style="{StaticResource TitleTextStyle}" Foreground="WhiteSmoke"/>
            <TextBlock Text="{Binding LastModified}" Margin="5, 0, 0, 0" Style="{StaticResource TitleTextStyle}" Foreground="WhiteSmoke"/>
        </StackPanel>
        <TextBlock Grid.Row="2" Text="{Binding VideoPath}" Margin="20, 10, 10, 10" Style="{StaticResource TitleTextStyle}" TextWrapping="Wrap" Foreground="WhiteSmoke"/>
    </Grid>
</DataTemplate>

因此,主要是Grid,其中有三行显示为ProjectGridView处理的Name项的名称,LastModified和VideoPath属性绑定的数据。正确检索项目,绑定没问题,我的问题更多的是......设计。

以下是一个例子:

enter image description here

如果您注意到,前两项似乎没问题 - 它们会显示LastModifiedVideoPath日期和Name。另一方面,第三项在TextBlock TextWrapping=true中显示较长的VideoPath,并且在显示时省略VideoPath。此外,{{1}}的第三个文本块也设置了TextWrapping。

有没有什么方法可以根据每个项目的需要为每个项目放大网格以显示完整内容?我需要对模板进行哪些修改?

修改

我不想明确地设置高度,因为在这种情况下,GridViewItems(其中textblocks的文本足够短一行)将会更大并且有...空区域(抱歉不好)解释,但我真的找不到我的话让它变得更好)...

1 个答案:

答案 0 :(得分:0)

Altough我搜索了大量可变大小的项目,发现了许多......复杂的解决方案,我遇到了一个非常简单的问题。

WinRT XAML Toolkit有一个很好的WrapPanel,它完成了我的所有工作。在模板中,我使用了Grid,而在GridView的WrapPanel中使用了ItemPanelTemplate,而不是<GridView.ItemsPanel> <ItemsPanelTemplate> <toolkit:WrapPanel Orientation="Vertical"/> </ItemsPanelTemplate> </GridView.ItemsPanel>

{{1}}

结果如下所示:enter image description here