C# 基于ItemsSource的GridView宽度
我目前正在使用C# 基于ItemsSource的GridView宽度,c#,xaml,gridview,windows-runtime,C#,Xaml,Gridview,Windows Runtime,我目前正在使用GridView来显示用户可以浏览的图像列表。当它们接近列表末尾时,通过使用实现ISupportIncrementalLoading的observateCollection加载新图像 如何更改单元格大小以匹配图像的大小?图像有时是纵向的,有时是横向的,有时是不均匀的纵横比;但是,GridView坚持所有单元格的宽度相同 e、 g.如果我同意以下内容: <GridView x:Name="itemGridView" AutomationProperties.Au
GridView
来显示用户可以浏览的图像列表。当它们接近列表末尾时,通过使用实现ISupportIncrementalLoading
的observateCollection
加载新图像
如何更改单元格大小以匹配图像的大小?图像有时是纵向的,有时是横向的,有时是不均匀的纵横比;但是,GridView
坚持所有单元格的宽度相同
e、 g.如果我同意以下内容:
<GridView
x:Name="itemGridView"
AutomationProperties.AutomationId="ItemsGridView"
AutomationProperties.Name="Items"
TabIndex="1"
Grid.RowSpan="2"
Padding="116,136,116,46"
SelectionMode="None"
DataFetchSize="10"
IncrementalLoadingThreshold="5"
ItemsSource="{Binding Source={StaticResource itemsViewSource}}"
IncrementalLoadingTrigger="Edge"
IsSwipeEnabled="false">
<GridView.ItemTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Left">
<Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}">
<Image Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>
</Border>
<StackPanel VerticalAlignment="Bottom" Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}">
<TextBlock Text="{Binding Title}" Foreground="{StaticResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextStyle}" Height="30" Margin="15,0,5,0"/>
</StackPanel>
</Grid>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
最后,我发现所有的时间都与第一张图片的宽度相同。如果我尝试设置图像宽度(我有一个返回图像宽度的databound属性),一些图像的宽度会变小,但它们所在的单元格的宽度仍然与其他所有图像的宽度相同
<Image Width="{Binding ImageWidth}" Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>
在层次结构中的任何项目上设置宽度似乎都没有帮助-即使将其发挥到极致也没有任何帮助-例如
<DataTemplate>
<Grid HorizontalAlignment="Left" Width="{Binding ImageWidth}">
<Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Width="{Binding ImageWidth}">
<Image Width="{Binding ImageWidth}" Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>
</Border>
<StackPanel VerticalAlignment="Bottom" Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}">
<TextBlock Text="{Binding Title}" Foreground="{StaticResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextStyle}" Height="30" Margin="15,0,5,0"/>
</StackPanel>
</Grid>
</DataTemplate>
看看
尝试将此xaml添加到GridView声明中:
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<VariableSizedWrapGrid />
</ItemsPanelTemplate>
</GridView.ItemsPanel>
有两个ItemsPanelTemplate-s支持增量加载:VirtualzingStackPanel和WrapGrid。 WrapGrid不允许不同项目的大小。 VirtualizingStackPanel允许项目大小可变,但在一行/一列中显示项目。 因此,如果您想要不同的布局,您需要一个定制的VirtualzingPanel实现 但我不明白你到底想要什么。如果需要网格,则行或列中的所有项目将具有相同的高度或宽度。您想要虚拟化VariableSizedWrapGrid吗