【问题标题】:Size GridViewItems to fill GridView?调整 GridView 项目的大小以填充 GridView?
【发布时间】:2013-02-01 02:08:54
【问题描述】:

我有这个问题的反面: How do I dynamically size a GridView Item?

我有一个两行四列的 GridView。所需的行为是让 GridViewItems 填充单元格,我想不出办法来做到这一点。 GridViewItem 是一个包含一些其他内容的网格,我将其作为 DataTemplate。我可以为项目提供宽度和高度,但这仅适用于一种分辨率,并且我需要项目是动态且成比例的,因此如果它们显示在不同的设备上,它们将继续为 2 行,每行 4 个项目。

在不同的页面上,我有一个布局相同的静态网格,每个单元格中都包含矩形。这些会自动拉伸,我尝试将它们的宽度和高度存储在我在 Rectangle 的 SizeChanged 上获得的 DependencyProperties 中,但我不知道如何绑定到它们。

XAML 页面是这样的:

                    <Grid x:Name="Pane2LayoutGrid" 
                    Grid.Column="1">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="90"/>
                        <RowDefinition/>
                    </Grid.RowDefinitions>

                    <TextBlock x:Name="TitleText" Text="Favorites" Style="{StaticResource TitleBarHeader}"/>

                    <GridView x:Name="GridView" 
                        Grid.Row="1" 
                        Margin="0,10,0,8" 
                        Style="{StaticResource GridView}" 
                        ItemsSource="{Binding Items, Source={StaticResource vm}}" 
                        />

                </Grid>

还有数据模板:

                <DataTemplate>
                <Grid>

                    <Border x:Name="Border" Style="{StaticResource GridBorder}">

                        <Grid x:Name="grid" Style="{StaticResource Grid}" >
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="1.3*"/>
                                <ColumnDefinition Width="2*"/>
                            </Grid.ColumnDefinitions>
                            <!-- rows for alignment -->
                            <Grid.RowDefinitions>
                                <RowDefinition Height="1*"/>
                                <RowDefinition Height="3*"/>
                                <RowDefinition Height="1*"/>
                            </Grid.RowDefinitions>
                            <TextBlock x:Name="Text1" Grid.Row="1" Text="{Binding Title}" Style="{StaticResource Title}" />
                            <TextBlock x:Name="Text2" Grid.Row="1" Text="{Binding Subtitle}" Style="{StaticResource SubTitle}" />
                        </Grid>

                    </Border>
                </Grid>
            </DataTemplate>

【问题讨论】:

    标签: xaml windows-runtime winrt-xaml


    【解决方案1】:

    我的队友 Dwayne 有解决方案,但我们花了一段时间才弄清楚。

    • 为 GridViewItem 的所需宽度创建 DependencyProperties 和 高度。
    • 在其 SizeChanged 事件上测量 GridView 的大小。 (我们的问题是试图获得一个不为零的值——其他事件 不会在正确的时间渲染面板。)
    • 将 ItemContainer WrapGrid 的 ItemWidth 和 ItemHeight 绑定到这些 DependencyProperties。在 DataTemplate 中设置宽度和高度不起作用。

    其中一个问题是一堆单独的小块需要缝合在一起。

    【讨论】:

    • 我只是总结了一下,因为要粘贴的内容很多。您需要特定部分的示例吗?
    • Nm 我发现 ListView 实际上以一种更简洁的方式完成了我想要的工作,而这篇文章使水平拉伸完全符合预期:stackoverflow.com/questions/15067309/…
    • 我也可以使用代码 sn-p。我真的不知道您为所需的宽度和高度创建 DependencyProperties 是什么意思。我知道如何将宽度和高度绑定到静态资源,但是当我更改它们时没有任何反应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多