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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:09:05