如何彻底移除MAUI Windows端Entry获取焦点时的边框?
.NET 7 MAUI Windows端移除Entry聚焦边框的彻底方案
你当前的代码已经处理了移动端和Windows未聚焦时的Entry边框,但Windows端Entry(对应WinUI的TextBox)聚焦时的边框仍存在——这是因为WinUI控件的聚焦视觉反馈不止受FocusVisualPrimaryThickness这类属性控制,还依赖内置的聚焦视觉机制。以下是彻底解决的方法:
修改后的自定义EntryHandler代码
EntryHandler.Mapper.AppendToMapping(nameof(Entry), (handler, view) => { #if IOS || MACCATALYST handler.PlatformView.BorderStyle = UIKit.UITextBorderStyle.None; #elif ANDROID handler.PlatformView.BackgroundTintList = Android.Content.Res.ColorStateList.ValueOf(Colors.Transparent.ToPlatform()); #elif WINDOWS var textBox = handler.PlatformView; // 移除常规边框 textBox.BorderThickness = new Microsoft.UI.Xaml.Thickness(0); textBox.BorderBrush = new Microsoft.UI.Xaml.Media.SolidColorBrush(Microsoft.UI.Colors.Transparent); // 直接禁用聚焦视觉反馈机制,这是彻底移除聚焦边框的关键 textBox.IsFocusVisualEnabled = false; // 兜底设置聚焦视觉厚度,确保无遗漏 textBox.FocusVisualPrimaryThickness = new Microsoft.UI.Xaml.Thickness(0); textBox.FocusVisualSecondaryThickness = new Microsoft.UI.Xaml.Thickness(0); #endif });
关键改动说明
IsFocusVisualEnabled = false:直接关闭WinUI TextBox的聚焦视觉反馈系统,从根源上消除聚焦时的边框提示。- 设置
BorderBrush为透明:避免控件模板中某些视觉状态切换时,残留的边框样式生效。 - 保留原有的厚度设置作为兜底:覆盖所有可能的边框相关属性,确保万无一失。
极端情况兜底方案(若上述方法仍无效)
如果你的Entry使用了自定义控件模板,可能需要直接替换样式来彻底移除边框:
#elif WINDOWS var textBox = handler.PlatformView; // 创建并应用无边框自定义样式 var noBorderStyle = new Microsoft.UI.Xaml.Style(typeof(Microsoft.UI.Xaml.Controls.TextBox)); noBorderStyle.Setters.Add(new Microsoft.UI.Xaml.Setter(Microsoft.UI.Xaml.Controls.TextBox.BorderThicknessProperty, new Microsoft.UI.Xaml.Thickness(0))); noBorderStyle.Setters.Add(new Microsoft.UI.Xaml.Setter(Microsoft.UI.Xaml.Controls.TextBox.BorderBrushProperty, new Microsoft.UI.Xaml.Media.SolidColorBrush(Microsoft.UI.Colors.Transparent))); noBorderStyle.Setters.Add(new Microsoft.UI.Xaml.Setter(Microsoft.UI.Xaml.Controls.TextBox.IsFocusVisualEnabledProperty, false)); textBox.Style = noBorderStyle; #endif
内容的提问来源于stack exchange,提问作者Jeremy A.
相关产品推荐
相关产品推荐

