如何修改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
相关产品推荐
相关产品推荐

