跳到主要内容
版本:11.0.0

如何绑定图像文件

信息

要在实际操作中查看这些概念的完整可运行示例,请查看示例应用程序

在Avalonia UI中,绑定图像文件为在应用程序中显示动态图像内容提供了机会。本指南提供了有关如何从各种来源绑定图像文件的概述。

从不同来源绑定图像文件

假设您有来自不同来源(例如,本地资源或Web URL)的图像,您希望在视图中显示这些图像,下面是如何实现的:

首先,在您的 ViewModel 中,您需要定义表示这些图像来源的属性。这些属性可以是 Bitmap 类型或 Task<Bitmap> 类型(如果加载图像涉及异步操作)。使用 ImageHelper 类来加载这些图像。

public class MainWindowViewModel : ViewModelBase
{
public Bitmap? ImageFromBinding { get; } = ImageHelper.LoadFromResource(new Uri("avares://LoadingImages/Assets/abstract.jpg"));
public Task<Bitmap?> ImageFromWebsite { get; } = ImageHelper.LoadFromWeb(new Uri("https://upload.wikimedia.org/wikipedia/commons/4/41/NewtonsPrincipia.jpg"));
}

您需要一个名为 ImageHelper 的辅助类,该类提供从资源和Web URL加载图像的方法。下面是如何实现这个类:

using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using Avalonia;
using Avalonia.Media.Imaging;
using Avalonia.Platform;

namespace ImageExample.Helpers
{
public static class ImageHelper
{
public static Bitmap LoadFromResource(Uri resourceUri)
{
return new Bitmap(AssetLoader.Open(resourceUri));
}

public static async Task<Bitmap?> LoadFromWeb(Uri url)
{
using var httpClient = new HttpClient();
try
{
var response = await httpClient.GetAsync(url);
response.EnsureSuccessStatusCode();
var data = await response.Content.ReadAsByteArrayAsync();
return new Bitmap(new MemoryStream(data));
}
catch (HttpRequestException ex)
{
Console.WriteLine($"An error occurred while downloading image '{url}' : {ex.Message}");
return null;
}
}
}
}

LoadFromResource 方法接受资源URI并使用Avalonia提供的 AssetLoader 类加载图像。LoadFromWeb 方法使用 HttpClient 类从Web URL加载图像。

然后,在您的视图中,您可以将这些图像来源绑定到 Image 控件:

<Grid ColumnDefinitions="*,*,*" RenderOptions.BitmapInterpolationMode="HighQuality">
<Image Grid.Column="0" Source="avares://LoadingImages/Assets/abstract.jpg" MaxWidth="300" />
<Image Grid.Column="1" Source="{Binding ImageFromBinding}" MaxWidth="300" />
<Image Grid.Column="2" Source="{Binding ImageFromWebsite^}" MaxWidth="300" />
</Grid>

Image 控件的 Source 属性可以接受各种类型的图像来源,包括文件路径、URL或资源。请注意,对于异步图像来源,必须在绑定表达式后使用 ^ 字符,以告诉Avalonia这是一个异步绑定。

请确保本地图像文件路径准确,图像文件可访问,并且如果它是应用程序资源的一部分,则已正确包含在您的项目中。如果要绑定到Web图像,请确保URL可访问。