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

如何在运行时消除WinUI3 TextBox的下划线?

解决MAUI WinUI自定义Entry下划线问题

针对WinUI 3的TextBox控件,要去掉自带的下划线,有几种可靠的编程方式:

  • 直接隐藏默认边框:
    获取到原生WinUI TextBox实例后,直接设置边框厚度为0、边框颜色为透明,就能隐藏默认下划线:

    // 假设已获取原生TextBox实例
    var nativeTextBox = ...;
    nativeTextBox.BorderThickness = new Windows.UI.Xaml.Thickness(0);
    nativeTextBox.BorderBrush = new Windows.UI.Xaml.Media.SolidColorBrush(Windows.UI.Colors.Transparent);
    
  • 自定义控件样式(推荐):
    如果上述方法不生效,可以重写TextBox的模板,完全移除默认下划线元素,同时保留文本显示逻辑:

    <!-- 在WinUI资源中定义无下划线样式 -->
    <Style x:Key="NoUnderlineTextBoxStyle" TargetType="TextBox">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TextBox">
                    <Grid>
                        <!-- 保留文本显示的核心容器 -->
                        <ContentPresenter x:Name="ContentPresenter"
                                        Margin="{TemplateBinding Padding}"
                                        HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                        VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                        Content="{TemplateBinding Text}"
                                        ContentTemplate="{TemplateBinding ContentTemplate}"
                                        TextWrapping="{TemplateBinding TextWrapping}" />
                        <!-- 此处可添加你自己实现的边框控件 -->
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    

    代码中应用该样式:

    nativeTextBox.Style = (Windows.UI.Xaml.Style)nativeTextBox.Resources["NoUnderlineTextBoxStyle"];
    
  • 修改状态样式:
    若下划线仅在聚焦、悬停等特定状态出现,可修改对应VisualState的边框属性:

    var visualStateGroups = Windows.UI.Xaml.VisualStateManager.GetVisualStateGroups(nativeTextBox);
    foreach (var group in visualStateGroups)
    {
        if (group.Name == "CommonStates")
        {
            foreach (var state in group.States)
            {
                if (state.Name is "Normal" or "Focused" or "PointerOver")
                {
                    foreach (var setter in state.Setters.OfType<Windows.UI.Xaml.Setter>())
                    {
                        if (setter.Property == Windows.UI.Xaml.Controls.TextBox.BorderBrushProperty)
                        {
                            setter.Value = new Windows.UI.Xaml.Media.SolidColorBrush(Windows.UI.Colors.Transparent);
                        }
                    }
                }
            }
        }
    }
    

以上方法均不会影响TextBox的文本显示,可根据自身实现场景选择适配方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 05:07:08