如何在WPF文本框中添加“输入此处”消息?
问题描述:
如果文本框没有键盘焦点并且没有文本,则显示斜体灰色的“在此输入”文本“内部”。怎么样?什么不起作用:如何在WPF文本框中添加“输入此处”消息?
- 设置
Text
属性 - 它弄乱数据绑定。 - 覆盖模板 - 无论如何,它已经变得混乱和覆盖。
最好,我希望解决方案尽可能多的XAML和尽可能少的C#。也许我可以创建一个附加的属性来做一些魔术?
答
不是干净的解决方案,但你可以随时添加一个TextBlock
覆盖的TextBox
和改变它的Visible
财产时TextBox
获得或失去焦点。
讨厌的黑客,但有点创新?我可以得到布朗尼分吗? ;-)
答
为您的TextBox创建样式。这是向您的TextBox添加“水印”的最简单方法之一。该代码创建一个简单的样式并将其绑定到TextBox。
<Window.Resources>
<Style x:Key="MyWaterMarkStyle" TargetType="{x:Type TextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Grid>
<Border Background="White" BorderBrush="#FF7D8683" BorderThickness="1"/>
<ScrollViewer x:Name="PART_ContentHost" Margin="5,0,0,0" VerticalAlignment="Center" />
<Label Margin="5,0,0,0" x:Name="WaterMarkLabel" Content="{TemplateBinding Tag}" VerticalAlignment="Center"
Visibility="Collapsed" Foreground="Gray" FontFamily="Arial"/>
</Grid>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Text" Value=""/>
</MultiTrigger.Conditions>
<Setter Property="Visibility" TargetName="WaterMarkLabel" Value="Visible"/>
</MultiTrigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="DimGray"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
...
<TextBox Style="{StaticResource MyWaterMarkStyle}" Height="25" Tag="Water mark"/>
+1你的答案:)。水印文本在WPF/Silverlight/whatnot中非常流行,并且有数百种解决方案在那里...... – Anvaka 2009-09-22 14:47:46