我想为 WPF 搜索文本框实现与“更改搜索框中的默认文本”完全相同的东西。该框应在为空时显示一些灰色的“搜索..”文本,然后在输入文本时应正常运行。链接的文章显示了如何在 javascript 中执行此操作。在 WPF 中如何开始这条道路?到目前为止,我最好的想法是在主文本框之上的另一个文本框,只要搜索文本框获得焦点或文本,它就会变得不可见。
6 回答
此样式将使用背景属性和可视笔刷显示文本。一旦控制获得焦点,文本就会被删除。
<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>
试试 Kevin Moore 的 Bag-o-Tricks 中的 InfoTextBox 示例。您可以从 http://work.j832.com/2008/01/real-update-to-bag-o-tricks.html下载它
对于这些类型的事物,我认为最好的方法是使用视觉画笔设置背景。视觉画笔可让您使用视觉元素绘制背景,将其与基于文本为空的触发器结合起来,就完成了。
空列表框消息的示例在这里,基本上是一样的。 http://adammills.wordpress.com/2010/08/04/simple-empty-template-for-itemscontrols/
与 WPF 中的往常一样,有很多方法可以实现您的目标。
也许最干净的方法是子类化TextBox
并添加一个名为HintText
. HintText
只要为Text
空 ( ) ,控件的模板就会显示(可能以斜体和灰色""
)。否则,它将Text
像常规一样显示TextBox
.
不涉及编写您自己的控件的另一种方法是重新模板TextBox
并使用该Tag
属性来存储提示文本。
另一种选择是编写 a UserControl
,将 aTextBox
与a 结合TextBlock
在同一Grid
. 将包含提示文本,并且仅在's为空TextBlock
时才会显示。这可能是最容易实现的,但也是最不灵活的。TextBox
Text
我认为 WPF 扩展工具包中包含的 WatermarkTextBox 正是您想要的。
http://wpftoolkit.codeplex.com/wikipage?title=WatermarkTextBox&referringTitle=Documentation
您可以在文本框为空时将文本框转换为灰色文本,并使用一个变量告诉您该文本为空,这样当您单击“搜索”时,它就不会搜索“搜索...”
或者您可以使用与您所说的类似的内容,但不是上面的文本框,而是下面的文本。如果在顶部你有一个透明背景的文本框,在底部你有一个标签,当顶部文本框为空时,你有一个“搜索”标签,这应该可以解决问题。