7

我想为 WPF 搜索文本框实现与“更改搜索框中的默认文本”完全相同的东西。该框应在为空时显示一些灰色的“搜索..”文本,然后在输入文本时应正常运行。链接的文章显示了如何在 javascript 中执行此操作。在 WPF 中如何开始这条道路?到目前为止,我最好的想法是在主文本框之上的另一个文本框,只要搜索文本框获得焦点或文本,它就会变得不可见。

4

6 回答 6

17

此样式将使用背景属性和可视笔刷显示文本。一旦控制获得焦点,文本就会被删除。

    <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>
于 2011-04-18T19:11:17.140 回答
7

试试 Kevin Moore 的 Bag-o-Tricks 中的 InfoTextBox 示例。您可以从 http://work.j832.com/2008/01/real-update-to-bag-o-tricks.html下载它

于 2008-12-21T10:46:54.523 回答
2

对于这些类型的事物,我认为最好的方法是使用视觉画笔设置背景。视觉画笔可让您使用视觉元素绘制背景,将其与基于文本为空的触发器结合起来,就完成了。

空列表框消息的示例在这里,基本上是一样的。 http://adammills.wordpress.com/2010/08/04/simple-empty-template-for-itemscontrols/

于 2010-08-16T13:48:14.487 回答
1

与 WPF 中的往常一样,有很多方法可以实现您的目标。

也许最干净的方法是子类化TextBox并添加一个名为HintText. HintText只要为Text空 ( ) ,控件的模板就会显示(可能以斜体和灰色"")。否则,它将Text像常规一样显示TextBox.

不涉及编写您自己的控件的另一种方法是重新模板TextBox并使用该Tag属性来存储提示文本。

另一种选择是编写 a UserControl,将 aTextBox与a 结合TextBlock在同一Grid. 将包含提示文本,并且仅在's为空TextBlock时才会显示。这可能是最容易实现的,但也是最不灵活的。TextBoxText

于 2008-12-21T10:45:13.730 回答
1

我认为 WPF 扩展工具包中包含的 WatermarkTextBox 正是您想要的。

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

于 2012-08-08T19:46:00.897 回答
0

您可以在文本框为空时将文本框转换为灰色文本,并使用一个变量告诉您​​该文本为空,这样当您单击“搜索”时,它就不会搜索“搜索...”

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

于 2008-12-21T09:53:58.983 回答