GridView项目高度是固定的

时间:2017-07-16 16:52:12

标签: c# xaml uwp

我正在开展一个项目,我有GridView,我需要展示一张图片和3 TextBlock。该图片具有固定的HeightWidth属性,第一个TextBlock具有1行文字或2.其他TextBlock只有1行文字。< / p>

问题在于,如果第一个TextBlock有一行文字,则所有内容都会完美显示,但如果文字长于一行,则TextBlock中不会显示最后一个GridViewItem它被隐藏在被隐藏的地方。

<GridView ItemsSource="{Binding HomeList, Mode=OneWay}">
    <GridView.ItemsPanel>
        <ItemsPanelTemplate>
            <ItemsWrapGrid Orientation="Horizontal" HorizontalAlignment="Center"/>
        </ItemsPanelTemplate>
    </GridView.ItemsPanel>
    <GridView.ItemTemplate>
        <DataTemplate x:DataType="local:ItemHelper">
            <UserControl>
                <StackPanel>
                    <Image Name="image" Source="{x:Bind ItemImage}"
                           Height="144" Width="256" HorizontalAlignment="Center"/>
                    <TextBlock Name="title" Text="{x:Bind ItemTitle}" Style="{StaticResource OneLinedItemTitle}"/>
                    <TextBlock Name="section" Text="{x:Bind ItemSection}"/>
                    <TextBlock Name="pubUpdate" Text="{x:Bind ItemPublishTime}"/>
                </StackPanel>
            </UserControl>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

我也用RelativePanel尝试了上面的XAML,同样的事情发生了。我希望将高度固定在最大高度,使用title的2行文字,或者为GridView中的每个项目调整高度。

image 1

正如您所看到的那样,第一项显示3 TextBlock s,但第二项只显示2,其中第一项显示2行文字。

我只看到以下可能的选项:

  1. 设置要为项目的最大高度固定的StackPanel的高度
  2. 使用2行文字
  3. 设置要修复的title的高度
  4. 也许修改Style的默认GridViewItem会有所帮助
  5. 或许还有其他任何可能的选项,不涉及为任何元素设置固定高度。

    有什么建议吗?感谢。

2 个答案:

答案 0 :(得分:0)

为什么不在Grid内使用UserControl而不是StackPanelStackPanel尺寸仅限于内容Heights。我会使用Grid,将RowDefinition设置为第三个Row设置为Height="*",将其他设置设置为Height="Auto"。我用ItemsControl(有效......)测试了这个。

<GridView ItemsSource="{Binding HomeList, Mode=OneWay}">
    <GridView.ItemsPanel>
        <ItemsPanelTemplate>
            <ItemsWrapGrid Orientation="Horizontal" HorizontalAlignment="Center"/>
        </ItemsPanelTemplate>
    </GridView.ItemsPanel>
    <GridView.ItemTemplate>
        <DataTemplate x:DataType="local:ItemHelper">
            <UserControl>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="*" />
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <Image Grid.Row="0" Name="image" Source="{x:Bind ItemImage}"                          Height="144" Width="256" HorizontalAlignment="Center"/>
                    <TextBlock Grid.Row="1" Name="title" Text="{x:Bind ItemTitle}" Style="{StaticResource OneLinedItemTitle}"/>
                    <TextBlock Grid.Row="2" Name="section" Text="{x:Bind ItemSection}" TextWrapping="Wrap"/>
                    <TextBlock Grid.Row="3" Name="pubUpdate" Text="{x:Bind ItemPublishTime}"/>
                </Grid>
            </UserControl>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

答案 1 :(得分:0)

似乎第一项未正确渲染(至少这是发生在我身上的事情)。检查Justin XL answer,也许可以帮上忙。显然,该问题(来自较差的渲染)是通过设置ItemHeight属性

解决的
<GridView.ItemsPanel>
     <ItemsPanelTemplate>
          <ItemsWrapGrid  ItemHeight="DesiredHeight"/>
     </ItemsPanelTemplate>
</GridView.ItemsPanel>