我有3张图片。它们都是圆形的(实际上是具有透明背景的正方形),并且都是3个大小完全相同的。
我希望以下xaml可以生成3个相似的图像,由于AspectFill的缘故,它们都拉伸到容器的最大值,并保持其长宽比。
这对UWP很好,但是在Android上,只有拳头图像似乎想听我的计划。我可以发现的唯一区别是,第一个映像是嵌入式资源,其他映像已下载。 (它们不是直接从url中显示,而是先存储在本地)
如果我仅显示下载的图像,它们都将显示为“小”。如果我仅显示嵌入式图像,则它们全部显示为“大”。
在我看来,在应用Aspect时,Android对下载的图像的处理方式不同于嵌入式图像,但我不知道为什么。
<ScrollView Orientation="Horizontal" HorizontalOptions="FillAndExpand">
<Grid>
<StackLayout x:Name="NarrationsStackLayout" BindableLayout.ItemsSource="{Binding Narrations}" Orientation="Horizontal" HorizontalOptions="CenterAndExpand" VerticalOptions="Fill">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Image Source="{Binding NarrationImage}" Aspect="AspectFill" HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" BackgroundColor="Green" >
<Image.GestureRecognizers>
<TapGestureRecognizer Command="{Binding TapCommand}" />
</Image.GestureRecognizers>
</Image>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</Grid>
</ScrollView>
什么可能导致这种行为?
根据朱欧(Leo Zhu)的建议,我有一个有效的解决方法来解决我的问题,但我对原因深感困惑。
<StackLayout x:Name="NarrationsStackLayout" BindableLayout.ItemsSource="{Binding Narrations}" Orientation="Horizontal" HorizontalOptions="CenterAndExpand" VerticalOptions="Fill" Margin="0" Padding="0">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Image Source="{Binding NarrationImage}" Aspect="AspectFill" HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" BackgroundColor="Green"
HeightRequest="{Binding Source={RelativeSource Mode=FindAncestor, AncestorType={x:Type StackLayout }}, Path=Height}"
WidthRequest="{Binding Source={RelativeSource Mode=FindAncestor, AncestorType={x:Type StackLayout }}, Path=Height}">
<Image.GestureRecognizers>
<TapGestureRecognizer Command="{Binding TapCommand}" />
</Image.GestureRecognizers>
</Image>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>