如何在WPF中实现搜索框的默认文本?
我想为WPF搜索文本框实现与“”完全类似的功能。该框为空时应显示一些灰显的“搜索…”文本,然后在键入文本时应能正常工作。链接文章展示了如何在javascript中实现这一点。在WPF中,如何沿着这条路径开始?到目前为止,我最好的想法是在主文本框的顶部添加另一个文本框,每当搜索文本框获得焦点或文本时,该文本框将不可见。您可以将文本框转换为灰色文本(每当文本框为空),并使用一个变量告诉您该文本框为空,这样当您单击“搜索”时,它就不会搜索“搜索…”如何在WPF中实现搜索框的默认文本?,wpf,search,textbox,Wpf,Search,Textbox,我想为WPF搜索文本框实现与“”完全类似的功能。该框为空时应显示一些灰显的“搜索…”文本,然后在键入文本时应能正常工作。链接文章展示了如何在javascript中实现这一点。在WPF中,如何沿着这条路径开始?到目前为止,我最好的想法是在主文本框的顶部添加另一个文本框,每当搜索文本框获得焦点或文本时,该文本框将不可见。您可以将文本框转换为灰色文本(每当文本框为空),并使用一个变量告诉您该文本框为空,这样当您单击“搜索”时,它就不会搜索“搜索…” 或者你可以使用类似于你所说的东西,但是你可以在下面有
或者你可以使用类似于你所说的东西,但是你可以在下面有文本而不是上面的文本框。如果在顶部有一个背景透明的文本框,在底部有一个标签,上面的文本框为空时,标签上有“搜索”,这应该可以解决问题 和WPF一样,有很多方法可以实现您的目标 也许最干净的方法是将
TextBox
子类化,并添加一个名为HintText
的新属性。控件的模板将显示HintText
(可能是斜体和灰色),只要Text
为空(”
)。否则,它将像常规的文本框一样显示文本
不需要编写自己的控件的另一种方法是重新设置TextBox
的模板,并使用Tag
属性来存储提示文本
另一种选择是编写一个UserControl
,它将TextBox
与TextBlock
组合在同一个网格中。TextBlock
将包含提示文本,并且仅当TextBox
的text
为空时才会显示。这可能是最容易实现的,但也是最不灵活的。试试凯文·摩尔的Bag-o-Tricks中的InfoTextBox示例。你可以从
我认为对于这些类型的东西,最好的方法是使用视觉画笔设置背景。
使用视觉画笔,可以使用视觉元素绘制背景,并根据文本为空将其与触发器组合,这样就完成了
这里是空列表框消息的示例,基本相同。
此样式将使用背景属性和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>
我认为WPF扩展工具包中包含的水印文本框正是您想要的
简单明了,我认为这应该被标记为好答案。这会使文本框的背景变成灰色。我试图解决的问题导致默认文本拉伸。我刚刚回答了另一个问题,问了同样的问题: