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

如何修改WPF TextBox的Placeholder实现,使其获焦时隐藏?

修改WPF TextBox Placeholder 实现,使其获取焦点时隐藏

要实现TextBox获取焦点时Placeholder隐藏,只需要在原有的MultiDataTrigger中添加一个判断TextBox未获得焦点的条件即可。只有当TextBox文本为空且未获得焦点时,Placeholder才会显示;一旦TextBox获得焦点或者已有输入内容,Placeholder就会自动隐藏。

修改后的完整代码如下:

<Grid>
    <TextBox x:Name="Field" Tag="{Binding Key}" Text="{Binding Value, Mode=TwoWay}" />
    <TextBlock Text="Optional" Foreground="LightGray" IsHitTestVisible="False" Margin="10 5 0 0">
        <TextBlock.Style>
            <Style TargetType="TextBlock" BasedOn="{StaticResource TinyText}">
                <Setter Property="Visibility" Value="Collapsed" />
                <Style.Triggers>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding ElementName=Field, Path=Text.Length}" Value="0" />
                            <!-- 新增条件:TextBox未获得焦点时才显示Placeholder -->
                            <Condition Binding="{Binding ElementName=Field, Path=IsFocused}" Value="False" />
                        </MultiDataTrigger.Conditions>
                        <MultiDataTrigger.Setters>
                            <Setter Property="Visibility" Value="Visible"/>
                        </MultiDataTrigger.Setters>
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
</Grid>

关键修改说明

  • 在MultiDataTrigger.Conditions中新增了绑定到TextBox的IsFocused属性的条件,值设为False,确保只有当TextBox没有焦点且文本为空时,Placeholder才会显示。
  • 原代码中的LostFocus和GotFocus事件已经不需要,可以直接移除,因为触发器已经能自动处理焦点变化的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:27:33