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

.NET MAUI Windows平台如何移除Switch控件右侧默认文本

.NET MAUI Windows平台Switch控件移除默认附带文本方案

问题现象

.NET MAUI的Switch控件仅在Windows平台运行时,控件右侧会默认显示与状态对应的「开/关」文本,Android、iOS等其他平台无该默认文本。
Xamarin.Forms中可直接设置ContentOff=""、ContentOn=""移除该文本,但.NET MAUI未公开这两个属性,尝试修改控件全局样式、使用官方文档的Label绑定方案,都只能额外新增自定义标签,无法移除原生默认渲染的文本。

测试用基础控件代码:

<Switch x:Name="styleSwitch" HorizontalOptions="Center" Scale="1.3"/>

测试用全局Switch样式:

<Style TargetType="Switch">
        <Setter Property="OnColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
        <Setter Property="ThumbColor" Value="{StaticResource White}" />
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" />
                    <VisualState x:Name="Disabled">
                        <VisualState.Setters>
                            <Setter Property="OnColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
                            <Setter Property="ThumbColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
                        </VisualState.Setters>
                    </VisualState>
                    <VisualState x:Name="On">
                        <VisualState.Setters>
                            <Setter Property="OnColor" Value="{AppThemeBinding Light={StaticResource Secondary}, Dark={StaticResource Gray200}}" />
                            <Setter Property="ThumbColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
                        </VisualState.Setters>
                    </VisualState>
                    <VisualState x:Name="Off">
                        <VisualState.Setters>
                            <Setter Property="ThumbColor" Value="{AppThemeBinding Light={StaticResource Gray400}, Dark={StaticResource Gray500}}" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>

复现步骤:

  • 新建默认模板的.NET MAUI项目
  • 在MainPage.xaml的布局中添加无额外属性配置的基础<Switch/>控件
  • 选择Windows Machine作为目标平台启动运行,即可看到Switch右侧附带的默认状态文本

问题原因

Windows端的MAUI Switch控件底层封装的是WinUI原生ToggleSwitch控件,该原生控件默认会给OnContent、OffContent属性赋值为系统本地化的「开/关」文本,MAUI框架层没有直接暴露这两个属性的公开设置入口,因此仅修改MAUI层的样式、属性无法移除该文本。

解决方法

方案1:全局Handler配置(推荐,一次配置全应用生效)

通过修改Windows平台Switch的Handler,在原生控件初始化时清空默认内容属性,所有平台的编译逻辑通过条件编译隔离,不会影响Android、iOS等其他平台的Switch表现:

  1. 打开项目中的MauiProgram.cs文件,引入所需命名空间,在CreateMauiApp方法中添加Handler配置:
using Microsoft.Maui.LifecycleEvents;
#if WINDOWS
using Microsoft.Maui.Handlers;
using Microsoft.UI.Xaml.Controls;
#endif

public static MauiApp CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder();
    builder
        .UseMauiApp<App>()
        .ConfigureFonts(fonts =>
        {
            fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
        });

#if WINDOWS
    // 全局修改Windows端Switch默认行为
    SwitchHandler.Mapper.AppendToMapping("RemoveSwitchText", (handler, view) =>
    {
        if (handler.PlatformView is ToggleSwitch nativeSwitch)
        {
            nativeSwitch.OnContent = string.Empty;
            nativeSwitch.OffContent = string.Empty;
        }
    });
#endif

    return builder.Build();
}

方案2:单控件单独修改(仅对指定控件生效)

如果只需要移除个别Switch控件的默认文本,可以在控件加载完成后获取原生控件实例单独修改:

  1. 给目标Switch控件添加Loaded事件:
<Switch x:Name="styleSwitch" HorizontalOptions="Center" Scale="1.3" Loaded="styleSwitch_Loaded"/>
  1. 在对应页面的后台代码中添加事件处理逻辑,通过条件编译仅在Windows平台执行:
#if WINDOWS
using Microsoft.UI.Xaml.Controls;
#endif

private void styleSwitch_Loaded(object sender, EventArgs e)
{
#if WINDOWS
    if (sender is Switch mauiSwitch && mauiSwitch.Handler?.PlatformView is ToggleSwitch nativeSwitch)
    {
        nativeSwitch.OnContent = string.Empty;
        nativeSwitch.OffContent = string.Empty;
    }
#endif
}

提示:不要尝试通过修改MAUI层控件的文本、颜色相关属性隐藏该内容,该文本属于Windows原生控件的内部属性,必须通过平台专属逻辑修改。


内容的提问来源于stack exchange,提问作者Nicolas Oñate

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:15:49