0

得到一个 GridView,它的项目宽度由第一个宽度设置(屏幕截图)

如何为每个项目设置一些自动宽度?

<GridView ItemsSource="{x:Bind PopularItems}" Style="{StaticResource GVStyle}" Height="230">
<GridView.ItemTemplate>
    <DataTemplate x:Name="GVTemp" x:DataType="models:LessDetails">
        <StackPanel>
            <Image Height="180" Width="132" Source="{x:Bind Img}" />
            <TextBlock Margin="4,4,0,4" HorizontalAlignment="Stretch" TextAlignment="Center"
       Text="{x:Bind Name}" Style="{ThemeResource BodyTextBlockStyle}" />
        </StackPanel>
    </DataTemplate>
</GridView.ItemTemplate>

第一项设置的项的宽度

4

2 回答 2

0

使用 ItemsStackPanel:

<GridView.ItemsPanel>
    <ItemsPanelTemplate>
        <ItemsStackPanel Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Left" />
    </ItemsPanelTemplate>
</GridView.ItemsPanel>

唯一的缺点是它不包装项目。为此,您可以使用,ItemsWrapGrid但随后您将失去自动宽度功能(第一项确定所有项目的宽度)。

VariableSizedWrapGrid可以通过给项目一个特定的 ColumnSpan/RowSpan 来使用,但它与自动计算宽度并不完全相同。

如果您想要两全其美,可能您需要编写自己的自定义面板。

更新:对于允许自动宽度和项目换行的解决方案,您可以使用UWP Community ToolkitWrapPanel中的控件。

于 2017-11-27T19:18:28.773 回答
0

您不能自动调整 GridView 控件中的每个项目的宽度,它被设计为使用第一个项目的大小作为统一大小(每个项目的 ListViewItemPresenter 具有相同的大小)。

对于自动调整大小的场景,我建议您使用 StackPanel 或创建自定义 ItemsControl。

于 2015-07-20T01:50:39.827 回答