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

Xamarin.Forms中Frame控件跨平台设置CornerRadius报错问询

解决Frame.CornerRadius跨平台设置的类型不匹配问题

你遇到的问题核心是类型不匹配——你错误地将Frame.CornerRadius当成了基础数值类型(double/int/float),但在.NET MAUI中,这个属性的类型是CornerRadius结构体(而非单纯的数值),所以直接用OnPlatform返回x:Double会导致类型不兼容报错。

正确的实现方式

你需要把OnPlatform的x:TypeArguments指定为CornerRadius,并通过Value属性传入对应平台的数值(CornerRadius支持隐式转换单个数值,会将该值应用到四个角):

<Frame HasShadow="false" Padding="10" BackgroundColor="Red">
    <Frame.CornerRadius>
        <OnPlatform x:TypeArguments="CornerRadius">
            <On Platform="iOS" Value="20"/>
            <On Platform="Android" Value="30"/>
        </OnPlatform>
    </Frame.CornerRadius>
    <Label Text="Hello World" />
</Frame>

为什么之前的写法会报错?

虽然你反编译发现内部实现用了float,但对外暴露的CornerRadius属性是一个结构体类型,而非基础数值类型。你之前指定x:TypeArguments="x:Double",意味着OnPlatform会返回一个double值,但Frame.CornerRadius需要的是CornerRadius实例,类型不匹配自然会触发错误。

如果是在Xamarin.Forms中(而非MAUI),Frame.CornerRadius确实是double类型,那此时你的原始写法只需调整为使用Value属性传递数值即可:

<OnPlatform x:TypeArguments="x:Double">
    <On Platform="iOS" Value="20"/>
    <On Platform="Android" Value="30"/>
</OnPlatform>

(你之前的写法没有用Value属性,直接写数值,这在Xamarin.Forms的OnPlatform旧语法中也可能导致问题)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:35:25