xaml - Xamarin Forms Image 具有 100% 的父容器宽度和自动高度以保持纵横比
问题描述
是否可以Image
在不裁剪的情况下将整个图像实际安装在该容器中,同时自动调整高度以保持纵横比,同时将其父容器的宽度设为 100%?
我在 SO 和 Xamarin 论坛上都阅读了类似的问题,但显然如果不实现自定义渲染器或在代码中手动计算正确的大小,这将无法完成。但是要在代码中计算它,您需要图像尺寸或纵横比。对于在 head 之前都不知道这些的应用程序,这是一个问题。
在 CSS 方面,我正在寻找的解决方案类似于
width:100%; height:auto;
在我看来,为这样一个微不足道的任务实现自定义渲染器对 Xamarin 来说是一种矫枉过正和巨大的尴尬。除非我理解错了。
解决方案
我无法找到解决此问题的纯 XAML 解决方案,因此决定使用ffimageloading的Success
事件来找出加载图像的原始宽度和高度,并从这些值中获取纵横比,存储它,并在SizeAllocated
事件中使用它来维护图像的纵横比,同时确保其宽度为父容器的 100%。
示例代码:
private void testImage_OnSuccess(object sender, CachedImageEvents.SuccessEventArgs e)
{
var image = sender as CachedImage;
double width = e.ImageInformation.OriginalWidth;
double height = e.ImageInformation.OriginalHeight;
ratio = width / height; // store it in a variable
}
protected override void OnSizeAllocated(double width, double height)
{
base.OnSizeAllocated(width, height);
if (this.Width > 0 && ratio != 0) // width of the parent container
testImage.HeightRequest = this.Width / ratio;
}
推荐阅读
- javascript - async 标签是否用 Promise 包装了 JavaScript 函数?
- postgresql - SSH RDS 的 DNS ODBC 驱动程序配置
- python - 如何使用 Python Argparse 为 Git 存储库创建 CLI 并单击
- php - MySQL查询字符串中所有逗号分隔的值
- android - Android Studio 中的设计视图缩到左侧
- python - 使用 matploblib 在 3dplot 中记录比例
- python - Python 代码:“Min”格式正确,但“Max”
- python - 在 IDLE 之外运行 Python 脚本
- php - 覆盖默认 str_slug - 可能吗?Laravel-7
- r - 使用 tidyverse 根据 R 中的日期计算 persion_id 的交互次数