我有两列,其中最左边的包含这样一个<Image>
一个ListView:
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*" />
<ColumnDefinition Width="0.5*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
</Grid.RowDefinitions>
<AbsoluteLayout Grid.Column="0" Grid.Row="0">
<Image
HeightRequest="130"
Aspect="AspectFill"
Source="{Binding DynamicOfferImage}"
local:ImageBinding.URL="{Binding DynamicOfferURL}"
AbsoluteLayout.LayoutBounds="1,1,1,1"
AbsoluteLayout.LayoutFlags="All">
<Image.Aspect>
<OnPlatform x:TypeArguments="Aspect">
<On Platform="iOS">AspectFit</On>
<On Platform="Android">AspectFit</On>
</OnPlatform>
</Image.Aspect>
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnImageTapGestureRecognized"
NumberOfTapsRequired="1" />
</Image.GestureRecognizers>
</Image>
<StackLayout IsVisible="{Binding IsRedeemed}" Margin="20" AbsoluteLayout.LayoutBounds="1,1,1,1" AbsoluteLayout.LayoutFlags="All">
<ContentView Padding="3" BackgroundColor="#d9534f">
<Label Text="{loc:_ S=LoginIsRedeemed}" FontSize="Medium" TextColor="#ffffff" HorizontalOptions="Center"></Label>
</ContentView>
</StackLayout>
</AbsoluteLayout>
<StackLayout Grid.Column="1" Grid.Row="0">
<!-- Text here, irrelevant to question -->
</StackLayout>
</Grid>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
该<Image>
的Source
属性绑定到托管在亚马逊S3 JPEG图像的URL。问题是大多数的这些图像被下载罚款时间,但是有时候一个图像,甚至所有图像,将无法下载(或不显示?)
这个问题不会消失,直到用户将重新安装应用程序。即使重新启动应用程序不计,它必须是一个实际的重新安装。
任何帮助非常感谢!
注意:这不是Xamarin Forms ListView Images Sometimes Displays, Sometimes Doesn't (UWP)的副本,如描述的情况是不同的。
我最终采取G.hakim的意见,并决定聘请FFImageLoading(通过NuGet包)的图像。这是非常简单的,虽然我不得不使用Xamarin.Android稍微旧版本。与最新版本(2.4.4.859)发生一些奇怪的链接错误,不得不回去2.4.1。它的作品真的很好,甚至无论哪种方式,增加了一个小动画在Xamarin.iOS图像。
这里是我的代码之前:
<Image
HeightRequest="130"
Aspect="AspectFill"
Source="{Binding DynamicOfferImage}"
local:ImageBinding.URL="{Binding DynamicOfferURL}"
AbsoluteLayout.LayoutBounds="1,1,1,1"
AbsoluteLayout.LayoutFlags="All">
<Image.Aspect>
<OnPlatform x:TypeArguments="Aspect">
<On Platform="iOS">AspectFit</On>
<On Platform="Android">AspectFit</On>
</OnPlatform>
</Image.Aspect>
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnImageTapGestureRecognized"
NumberOfTapsRequired="1" />
</Image.GestureRecognizers>
</Image>
为了得到FFImageLoading工作,你必须把它添加到根<ContentPage>
元素:
xmlns:ffimageloading="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"
xmlns:fftransformations="clr-namespace:FFImageLoading.Transformations;assembly=FFImageLoading.Transformations"
然后,我能够做到这一点:
<ffimageloading:CachedImage
AbsoluteLayout.LayoutBounds="1,1,1,1"
AbsoluteLayout.LayoutFlags="All"
HeightRequest="130"
DownsampleToViewSize="true"
Source="{Binding DynamicOfferImage}"
local:ViewBinding.URL="{Binding DynamicOfferURL}">
<ffimageloading:CachedImage.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnViewTapGestureRecognized"
NumberOfTapsRequired="1" />
</ffimageloading:CachedImage.GestureRecognizers>
</ffimageloading:CachedImage>
为了它与我的工作TapGestureRecognizer
我改投在方法的((Image)sender)
投((View)sender)
因为FFImageLoading的CachedImage
类实际上并没有继承Image
,它继承View
。事情要记住,如果你有手势,甚至自定义绑定。
除此之外,这是很插件和播放,我感到很满意的结果。