如何在UWP应用中禁用TextBox的焦点视觉效果
解决UWP TextBox禁用焦点视觉效果的问题
嘿,我完全懂你的需求——在UserControl里的Grid只保留外边框,TextBox的焦点高亮要彻底隐藏对吧?你已经尝试了一堆焦点相关属性,这里给你两个更简洁彻底的方案:
方案1:直接移除焦点视觉样式
最省心的方式就是给TextBox设置FocusVisualStyle="{x:Null}",这会直接清除系统默认的所有焦点视觉效果,比单独设置一堆Brush和Thickness要高效得多。修改后的TextBox代码如下:
<TextBox x:Name="CodigoTextBox" Text="{x:Bind Codigo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Column="1" MinWidth="150" BorderThickness="0" IsFocusEngagementEnabled="False" AllowFocusOnInteraction="True" FocusVisualStyle="{x:Null}"/>
方案2:自定义TextBox样式(更灵活)
如果你以后需要对控件样式做更多定制,可以重写TextBox的Style,直接移除所有和焦点相关的视觉状态。比如在你的UserControl资源里添加这样的样式:
<UserControl.Resources> <Style x:Key="NoFocusTextBoxStyle" TargetType="TextBox"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="TextBox"> <Grid> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal"/> <VisualState x:Name="PointerOver"/> <VisualState x:Name="Pressed"/> <VisualState x:Name="Disabled"/> </VisualStateGroup> <!-- 移除FocusStates组,彻底清除焦点视觉逻辑 --> </VisualStateManager.VisualStateGroups> <Border x:Name="BorderElement" BorderThickness="0" Background="{TemplateBinding Background}"/> <ScrollViewer x:Name="ContentElement" Padding="{TemplateBinding Padding}" IsTabStop="False"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> </UserControl.Resources>
然后给TextBox应用这个样式:Style="{StaticResource NoFocusTextBoxStyle}"
额外提醒:确保Grid边框正确显示
别忘了给外层Grid设置边框属性,同时把ComboBox和TextBox的BorderThickness都设为0,避免内部边框干扰:
<Grid BorderBrush="#888" BorderThickness="1" Padding="6"> <ComboBox Grid.Column="0" BorderThickness="0" .../> <TextBox Grid.Column="1" .../> </Grid>
内容的提问来源于stack exchange,提问作者David Simões
相关产品推荐
相关产品推荐

