我希望为WPF搜索TextBox实现与“Changing the Default Text in the Search Box”完全相同的内容。当文本被输入时,该框应该显示一些灰色的“搜索...”文本,然后它应该在输入文本时正常运行。链接的文章显示了如何在javascript中执行此操作。如何在WPF中开始这条路?到目前为止,我所拥有的最好的想法是在主要文本框之上的另一个文本框,只要搜索文本框获得焦点或文本,它就不可见。
答案 0 :(得分:17)
此样式将使用background属性和visualbrush显示文本。一旦控件获得焦点,文本就会被删除。
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text}" Value="">
<Setter Property="Background">
<Setter.Value>
<VisualBrush Stretch="None">
<VisualBrush.Visual>
<TextBlock Text="Enter value" Foreground="Gray"/>
</VisualBrush.Visual>
</VisualBrush>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text}" Value="{x:Null}">
<Setter Property="Background">
<Setter.Value>
<VisualBrush Stretch="None">
<VisualBrush.Visual>
<TextBlock Text="Enter value" Foreground="Gray"/>
</VisualBrush.Visual>
</VisualBrush>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsFocused}" Value="True">
<Setter Property="Background">
<Setter.Value>
<VisualBrush Stretch="None">
</VisualBrush>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
答案 1 :(得分:7)
尝试来自Kevin Moore的Bag-o-Tricks的InfoTextBox样本。你可以从下载 http://work.j832.com/2008/01/real-update-to-bag-o-tricks.html
答案 2 :(得分:2)
我认为对这些类型的事物最好的方法是使用可视化笔刷设置背景。 可视化画笔允许您使用可视元素绘制背景,将其与基于文本为空的触发器组合并完成。
空列表框消息的示例在这里,基本上是一回事。 http://adammills.wordpress.com/2010/08/04/simple-empty-template-for-itemscontrols/
答案 3 :(得分:1)
与WPF一样,有很多方法可以实现您的目标。
也许最干净的方法是继承TextBox
并添加一个名为HintText
的新属性。只要HintText
为空(Text
),您的控件的模板就会显示""
(可能以斜体和灰色显示)。否则,它会像常规Text
一样显示TextBox
。
不涉及编写自己控件的替代方法是重新模板TextBox
并使用Tag
属性存储提示文本。
另一种方法是编写UserControl
,将TextBox
与TextBlock
组合在同一Grid
内。 TextBlock
将包含提示文本,并且仅在TextBox
的{{1}}为空时才会显示。这可能是最容易实现的,但也是最不灵活的。
答案 4 :(得分:1)
我认为WPF扩展工具包中包含的WatermarkTextBox完全符合您的要求。
http://wpftoolkit.codeplex.com/wikipage?title=WatermarkTextBox&referringTitle=Documentation
答案 5 :(得分:0)
你可以将文本框转换为灰色文本,只要它是空的,并且变量会告诉你是空的,这样当你点击搜索它就不会搜索“搜索...”
或者您可以使用类似于您所说的内容,但不是上面的文本框,您可以在下面找到文字。如果在顶部你有一个透明背景的文本框,并且在底部你有一个标签,当顶部文本框为空时应该“搜索”,以解决问题。