I want to implement something exactly like "Changing the Default Text in the Search Box" for a WPF search TextBox. The box should show some greyed out "Search.." text when it's empty, and then it should function normally when text is typed in. The linked article shows how to do this in javascript. How would one start down this path in WPF? The best idea I've had so far is another text box on top of the main one that goes invisible whenever the search textbox gets focus or text.
相关问题
- Carriage Return (ASCII chr 13) is missing from tex
- VNC control for WPF application
- What is the best way to do a search in a large fil
- WPF Binding from System.Windows.SystemParameters.P
- XAML: Applying styles to nested controls
I think the WatermarkTextBox included in the WPF extended toolkit does exactly what you want.
http://wpftoolkit.codeplex.com/wikipage?title=WatermarkTextBox&referringTitle=Documentation
You could transform the textbox to have gray text whenever its empty and a variable that would tell you that is empty, so that when you clicked Search it would not go searching for "Search..."
Or you could use something similar to what you are saying, but instead of a textbox above you could have text below. If on top you have a textbox with transparent background and on the bottom you have a label that has "Search" when the top textbox is empty that should solve the problem.
Try the InfoTextBox sample from Kevin Moore's Bag-o-Tricks. You can download it from http://work.j832.com/2008/01/real-update-to-bag-o-tricks.html
The best way I think for these types of things is to set the background using a visual brush. The visual brush lets you paint a background using Visual Elements, combine it with a trigger based on text being empty and it's done.
Example for Empty List Box message is here, basically the same thing. http://adammills.wordpress.com/2010/08/04/simple-empty-template-for-itemscontrols/
This style will show text using a the background property and a visualbrush. Once control gets focus the text is removed.
As always in WPF, there are many ways to achieve your goal.
Perhaps the cleanest way is to subclass
TextBox
and add a new property calledHintText
. The template for your control would displayHintText
(probably in italics and gray) as long asText
is empty (""
). Otherwise, it would display theText
just like a regularTextBox
.An alternative that doesn't involve writing your own control is to re-template
TextBox
and use theTag
property to store the hint text.Another alternative is to write a
UserControl
that combines aTextBox
with, say, aTextBlock
inside the sameGrid
. TheTextBlock
would contain the hint text and would only be displayed if theTextBox
'sText
is empty. This is probably the easiest to achieve, but is also the least flexible.