我想创建一个文本框,如果是的话,里面会出现一个灰色的“默认”文本
a) 空
b) 失去焦点
当用户输入文本框时,灰色的“默认”文本应该消失。
我已尝试使用 ControlTemplate.Triggers
执行此操作,但我似乎找不到 HasFocus
属性。
使用 XAML 执行此操作的最佳方法是什么?
最佳答案
虽然重新发明轮子并没有真正的好处,但看看如何做到这一点可能会很有趣。执行此操作的最简单方法(在纯 XAML 中)是为 TextBox
创建一个 ControlTemplate
,它在未获得焦点时覆盖 TextBlock
,并且不包含文字:
<ControlTemplate TargetType="TextBox">
<Grid>
<TextBox Text="{Binding Text, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock HorizontalAlignment="Center"
VerticalAlignment="Center"
Text="Your Prompt Here"
Margin="5,0,5,0"
Foreground="#FF808080"
FontStyle="Italic"
IsHitTestVisible="False"
x:Name="UserMessage"
Visibility="Hidden"/>
</Grid>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Text" Value=""/>
<Condition Property="IsKeyboardFocusWithin" Value="False"/>
</MultiTrigger.Conditions>
<Setter Property="Visibility" TargetName="UserMessage" Value="Visible"/>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
MultiTrigger
表示“如果 Text
属性为空且 TextBox 没有键盘焦点,则将 Visibility 设置为 Visible”
如果你想让它更可重用,那么你可以创建一个自定义控件,将其作为默认模板,并使用包含提示消息的依赖属性
关于c# - 使用 XAML 使 "default"文本显示在没有焦点的空文本框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10428230/