如何在WPF中为搜索框实现默认文本?

时间:2008-12-21 08:41:43

标签: wpf search textbox

我希望为WPF搜索TextBox实现与“Changing the Default Text in the Search Box”完全相同的内容。当文本被输入时,该框应该显示一些灰色的“搜索...”文本,然后它应该在输入文本时正常运行。链接的文章显示了如何在javascript中执行此操作。如何在WPF中开始这条路?到目前为止,我所拥有的最好的想法是在主要文本框之上的另一个文本框,只要搜索文本框获得焦点或文本,它就不可见。

6 个答案:

答案 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,将TextBoxTextBlock组合在同一Grid内。 TextBlock将包含提示文本,并且仅在TextBox的{​​{1}}为空时才会显示。这可能是最容易实现的,但也是最不灵活的。

答案 4 :(得分:1)

我认为WPF扩展工具包中包含的WatermarkTextBox完全符合您的要求。

http://wpftoolkit.codeplex.com/wikipage?title=WatermarkTextBox&referringTitle=Documentation

答案 5 :(得分:0)

你可以将文本框转换为灰色文本,只要它是空的,并且变量会告诉你是空的,这样当你点击搜索它就不会搜索“搜索...”

或者您可以使用类似于您所说的内容,但不是上面的文本框,您可以在下面找到文字。如果在顶部你有一个透明背景的文本框,并且在底部你有一个标签,当顶部文本框为空时应该“搜索”,以解决问题。