我需要从CDN下载静态图像并在Xamarin中显示它们。窗体视图。我是Xamarin的新手,我很难弄清楚如何从HTTP请求中提取的字节数组加载图像。
我认为有以下XAML:
<ListView ItemsSource="{Binding Images}">
<ListView.ItemTemplate>
<DataTemplate>
<ImageCell ImageSource="{Binding .}">
</ImageCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
在我的代码隐藏中,我获取图像并尝试绑定到
ImageSource
实例。
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
public ObservableCollection<ImageSource> Images { get; set; } = new ObservableCollection<ImageSource>();
protected override async void OnAppearing()
{
base.OnAppearing();
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Referer", "https://foo.bar/");
var response = await client.GetAsync("https://foo.bar/library/5.jpg");
byte[] image = await response.Content.ReadAsByteArrayAsync();
var imageSource = ImageSource.FromStream(() => new MemoryStream(image));
this.Images.Add(imageSource);
}
}
当我这样做时,StackLayout中的图像是空的。我知道我可以只绑定到URL,ImageSource可以为我下载它,但我需要通过
Referrer
标题。我无论如何也看不到要强制使用XAML
Image
在我的代码背后。
当我在上阅读文档时
听起来它只支持URI、文件、流和应用程序资源来加载图像。因为我有一个字节数组,所以我把它包装在一个
MemoryStream
ImageSource.FromStream
. 当应用程序运行时,不会加载任何内容
ImageCell
是空的。
byte[]
到Base64字符串,然后将其放入
Base64 to Image Decoder
. 图像加载没有问题,所以我知道它被正确下载。我不明白的是,为什么我不能让图像在计算机上渲染
.
我也试着用一个普通的
控件和具有相同的问题。
<ScrollView>
<ContentView>
<StackLayout BindableLayout.ItemsSource="{Binding Images}" Orientation="Horizontal">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Image Source="{Binding}"></Image>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</ContentView>
</ScrollView>
我在这里做的是完全错误的事情,还是从互联网上动态下载带有特殊标题的图片,这是我在Xamarin中无法做到的。形式?