You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Xamarin Forms的XAML中创建适配所有屏幕尺寸的全屏矩形?

解决Xamarin.Forms中Rectangle适配屏幕尺寸的问题

我来帮你搞定这个边框适配的问题!你遇到的核心问题是对HeightRequest的用法理解有误——1*是Grid行/列的尺寸单位,不能直接用在HeightRequest属性上,而且要让Rectangle填满屏幕,关键是要正确设置它的布局选项。

问题分析

你的Grid已经设置了VerticalOptions="FillAndExpand"和HorizontalOptions="FillAndExpand",这意味着它会填满父容器的空间,但Rectangle没有设置正确的布局属性,导致它无法跟着Grid一起扩展。另外,HeightRequest接受的是具体数值(比如400)或者Auto,不支持*这种比例单位。

解决方案

修改Rectangle的属性,去掉无效的HeightRequest,并添加让它填充整个Grid单元格的布局选项:

  1. 给Rectangle设置HorizontalOptions="FillAndExpand"和VerticalOptions="FillAndExpand",这样它会自动填满所在的Grid单元格
  2. 移除HeightRequest="1*",这个属性在这里完全没用

修改后的完整XAML代码如下:

<StackLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
    <Grid VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
        <xct:CameraView x:Name="cameraView" 
                        CameraOptions="Back" 
                        CaptureMode="Photo" 
                        OnAvailable="CameraView_OnAvailable">
            <xct:CameraView.Behaviors>
                <xct:EventToCommandBehavior Command="{Binding PhotoCapturedCommand}" 
                                            EventName="MediaCaptured" />
            </xct:CameraView.Behaviors>
        </xct:CameraView>
        <Rectangle Fill="Transparent" 
                   Stroke="Blue" 
                   Opacity="0.7" 
                   StrokeThickness="150"
                   HorizontalOptions="FillAndExpand"
                   VerticalOptions="FillAndExpand"/>
    </Grid>
</StackLayout>

额外提示

  • 我给外层的StackLayout也加上了FillAndExpand,确保它能占满整个页面的可用空间,避免出现留白
  • 如果觉得StrokeThickness="150"太粗,可以根据实际需求调整数值,它控制的是边框的宽度

这样修改后,Rectangle就会完美适配所有屏幕尺寸,在相机取景框上方显示一个粗透明边框啦!

内容的提问来源于stack exchange,提问作者Mustafa Alahmid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 14:57:48