在 Xamarin Forms 中,我想根据原始源文件的大小设置图像的大小 - 如果最初是纵向的,则更高。
在 OnAppearing 页面上,我循环浏览图像列表,并在成功加载时使用每个图像计算出我需要的尺寸,然后在页面上设置尺寸。
这在 ios 手机和平板电脑上工作正常,但在 Android 上我收到错误
System.NullReferenceException: Object reference not set to an instance of an object
堆栈跟踪告诉我它是在尝试时发生的:
Grid.CalculateAutoCells (System.Double width, System.Double height)
我认为这意味着图像没有时间加载,所以没有宽度或高度。
根据代码,任何人都可以建议任何修改以使其正常工作吗?
编辑:
刚刚注意到它间歇性地崩溃,我可以从轮播中打开页面,一切正常,然后我返回,打开另一个页面,再次返回并打开同一页面,它崩溃了。
if (v.ContentType == Models.ContentType.Image)
{
CachedImage img = new CachedImage() { CacheType = FFImageLoading.Cache.CacheType.Memory };
var h = 0;
var w = 0;
img.Source = GetNextImage();
img.Success += (sender, e) =>
{
h = e.ImageInformation.OriginalHeight;
w = e.ImageInformation.OriginalWidth;
if (Device.Idiom == TargetIdiom.Phone)
{
if (h > w)
{
img.HeightRequest = 350;
}
else
{
img.HeightRequest = 200;
}
retry = false;
}
if (Device.Idiom == TargetIdiom.Tablet)
{
if (h > w)
{
img.HeightRequest = 800;
}
else
{
img.HeightRequest = 500;
}
}
};
最佳答案
在 Android 中“OnAppearing”不承认页面已完全加载,所以也许你调用的图像还没有被 Android“绘制”,这就是错误是“间歇性”的原因......有很多可能网络上的解决方案,但更依赖于代码......也许你可以尝试类似的东西:
public YourPage()
{
InitializeComponent();
my_image_resize_function();
}
或者可能将其覆盖为异步:
protected override async void OnAppearing()
{
base.OnAppearing();
await Task.Delay(1000);
my_image_resize_function();
}
关于c# - Xamarin Forms - 根据原始源文件大小在 C# 中设置图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51627656/