我正在开展一个项目,我有GridView
,我需要展示一张图片和3 TextBlock
。该图片具有固定的Height
和Width
属性,第一个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
中的每个项目调整高度。
正如您所看到的那样,第一项显示3 TextBlock
s,但第二项只显示2,其中第一项显示2行文字。
我只看到以下可能的选项:
StackPanel
的高度title
的高度
Style
的默认GridViewItem
会有所帮助或许还有其他任何可能的选项,不涉及为任何元素设置固定高度。
有什么建议吗?感谢。
答案 0 :(得分:0)
为什么不在Grid
内使用UserControl
而不是StackPanel
。 StackPanel
尺寸仅限于内容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>