如何使用XAML/.NET Maui设置具有AspectFill行为但左对齐的背景图像?

fafcakar  于 2022-12-07  发布在  .NET
关注(0)|答案(1)|浏览(259)

我正在使用一个应用程序,它使用一个图像作为背景,我希望它填充整个窗口,而不管大小。图像源是方形的,如下所示:

最简单的方法是使用AspectFill,如下所示:

<Image 
     Source="image_source.png"
     Aspect="AspectFill"/>

但这会导致图像居中,如下所示:

当我需要的是图像左对齐时,就像这样:

我几乎成功地使用了这个:

<AbsoluteLayout>
        <Image 
            Source="image_source.png" 
            AbsoluteLayout.LayoutFlags="HeightProportional"
            AbsoluteLayout.LayoutBounds="0,0,Autosize,1"/>       
</AbsoluteLayout>

但问题是,当我有一个像平板电脑或可折叠的屏幕,这是更宽的水平,它最终得到像这样的信箱:

当我想要的只是一个普通的AspectFill时,就像这样:


指令集
有没有办法用现有的Aspect选项来实现这个行为?如果没有,有没有办法扩展Aspect枚举和渲染器,使图像的表现与AspectFill相同,但锁定到图像的左边缘而不是中心?
我在.NET Maui中使用XAML,所以如果有C#的解决方案,我也愿意接受

yr9zkbsy

yr9zkbsy1#

能够从Reddit得到一个解决方案,所以我把它贴在这里给任何偶然发现这个的人:
我的最后一个XAMl

<Grid>
    <Image
        x:Name="backgroundImage"
        Source="image_source.png"
        Aspect="AspectFill"
        HorizontalOptions="Start"/>
</Grid>

我在代码隐藏中添加了以下内容:

protected override void OnSizeAllocated (double pageWidth, double pageHeight) {
    base.OnSizeAllocated(pageWidth, pageHeight);
    const double aspectRatio = 1600 / 1441.0; // Aspect ratio of the original image
    backgroundImage.WidthRequest = Math.Max(pageHeight * aspectRatio, pageWidth);
}

相关问题