如何在运行时消除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
相关产品推荐
相关产品推荐

