c# - Xamarin Forms - 根据原始源文件大小在 C# 中设置图像大小

标签 c# image xamarin.forms

在 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/

相关文章:

ios - 如何使用 UIPageControl 浏览图像?

xml - 如何在 Odoo 的自定义 QWeb 报告中打印图像?

c# - 如何居中/设置 map 缩放以覆盖 Xamarin.Forms 上可见的所有标记?

ios - 如何在 Xamarin.Forms 的导航栏上设置后退按钮的标题?

xamarin - 如何使用Xamarin表单查看PDF文件

c# - 通过 .Net Socket 发送/接收为串行通信构建的消息

c# - 如何使用 ?字符串关键字

c# - 无法逃脱的打开文件夹

c# - EF : Include navigation property and exclude sub navigation property in same time

php - 如何在一天中的不同时间使用不同的背景图像