如何向 WPF 文本框添加提示文本?
例如,当文本框为空时,Facebook 的搜索文本框中会显示“搜索”提示文本。
如何用WPF文本框实现这一点?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
例如,当文本框为空时,Facebook 的搜索文本框中会显示“搜索”提示文本。
如何用WPF文本框实现这一点?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(15)
您可以使用
VisualBrush
和Style
中的一些触发器更轻松地完成此操作:要提高此
Style
的可重用性,您可以还创建一组附加属性来控制实际的提示横幅文本、颜色、方向等。You can accomplish this much more easily with a
VisualBrush
and some triggers in aStyle
:To increase the re-usability of this
Style
, you can also create a set of attached properties to control the actual cue banner text, color, orientation etc.这是我的简单解决方案,改编自 Microsoft (https://code.msdn.microsoft.com/windowsapps/How-to-add-a-hint-text-to-ed66a3c6)
This is my simple solution, adapted from Microsoft (https://code.msdn.microsoft.com/windowsapps/How-to-add-a-hint-text-to-ed66a3c6)
使用 materialDesign HintAssist 怎么样?我正在使用这个,你也可以添加浮动提示:
我使用 Nuget 包安装了 Material Design,文档链接
what about using materialDesign HintAssist ? i'm using this which also you can add floating hint too :
i installed Material Design with Nuget Package there is installation guide in documentation link
通过将文本颜色最初设置为灰色并添加用于获得和失去键盘焦点的事件处理程序,在代码隐藏中执行此操作。
然后是事件处理程序:
Do it in the code-behind by setting the text color initially to gray and adding event handlers for gaining and losing keyboard focus.
Then the event handlers:
您必须通过继承文本框来创建自定义控件。
下面的链接有一个关于搜索文本框示例的优秀示例。
请查看此
http://davidowens.wordpress。 com/2009/02/18/wpf-search-text-box/
You have to create a custom control by inheriting the textbox.
Below link has an excellent example about the search textbox sample.
Please have a look at this
http://davidowens.wordpress.com/2009/02/18/wpf-search-text-box/
你可以用一种非常简单的方式来做。
这个想法是将标签放置在与文本框相同的位置。如果文本框没有文本并且没有焦点,您的标签将可见。
额外提示:如果您希望文本框具有默认值,请务必在提交数据时设置它(例如:“InputText”=“PlaceHolder Text Here”,如果为空)。
You can do in a very simple way.
The idea is to place a Label in the same place as your textbox. Your Label will be visible if textbox has no text and hasn't the focus.
Bonus:If you want to have default value for your textBox, be sure after to set it when submitting data (for example:"InputText"="PlaceHolder Text Here" if empty).
我曾经遇到过同样的情况,我按照以下方法解决了。
我只满足了提示框的要求,您可以通过在其他事件(例如焦点等)上添加效果和其他内容来使其更具交互性。
WPF 代码(我已删除样式以使其可读)
C# 代码
I once got into the same situation, I solved it following way.
I've only fulfilled the requirements of a hint box, you can make it more interactive by adding effects and other things on other events like on focus etc.
WPF CODE (I've removed styling to make it readable)
C# Code
另一种方法;-)
这也适用于
PasswordBox
。如果您想将其与TextBox
一起使用,只需将PasswordChanged
与TextChanged
交换即可。XAML:
代码隐藏:
Another approach ;-)
this works also with
PasswordBox
. If you want to use it withTextBox
, simply exchangePasswordChanged
withTextChanged
.XAML:
CodeBehind:
另一种解决方案是使用 MahApps.Metro 等 WPF 工具包。它有许多不错的功能,例如文本框水印:
Controls:TextBoxHelper.Watermark="Search..."
请参阅http://mahapps.com/controls/textbox.html
Another solution is to use a WPF toolkit like MahApps.Metro. It has many nice features, like a text box watermark:
Controls:TextBoxHelper.Watermark="Search..."
See http://mahapps.com/controls/textbox.html
我使用了获得和失去焦点事件:
效果很好,但文本仍然是灰色的。需要清理。我用的是VB.NET
I used the got and lost focus events:
It works well, but the text is in gray still. Needs cleaning up. I was using VB.NET
这是我的看法:
我认为大多数其他答案(包括最重要的答案)都有缺陷。
该解决方案在所有情况下都有效。纯XAML,易于重用。
That's my take:
Most other answers including the top one have flaws in my opinion.
This solution works under all circumstances. Pure XAML, easily reusable.
您可以在 Nuget 中使用 Material Design 及其库。
该库默认提供了此功能,并且它还具有聚焦模式下的动画。代码如下:
显示如下。
you can use Material Design and its library in Nuget.
This library provided this feature by default, and it also has animation in focused mode. The code is as follows:
And it is displayed as below.
我使用
VisualBrush
和sellmeadog
建议的Style
中的一些触发器来完成此操作。@sellmeadog:应用程序正在运行,bt 设计未加载...出现以下错误:
类型引用不明确。名为“StaticExtension”的类型至少出现在两个命名空间中:“MS.Internal.Metadata.ExposedTypes.Xaml”和“System.Windows.Markup”。考虑调整程序集 XmlnsDefinition 属性。
我正在使用 .net 3.5
I accomplish this with a
VisualBrush
and some triggers in aStyle
suggested by :sellmeadog
.@sellmeadog :Application running, bt Design not loading...the following Error comes:
Ambiguous type reference. A type named 'StaticExtension' occurs in at least two namespaces, 'MS.Internal.Metadata.ExposedTypes.Xaml' and 'System.Windows.Markup'. Consider adjusting the assembly XmlnsDefinition attributes.
'm using .net 3.5
对于WPF来说,没有办法。你必须模仿它。 查看此示例。第二种(不稳定的解决方案)是托管一个继承自 TextBox 的 WinForms 用户控件,并将 EM_SETCUEBANNER 消息发送到编辑控件。 IE。
另外,如果您想托管 WinForm 控制方法,我有一个已经包含此实现的框架,称为 BitFlex Framework,您可以 在此处免费下载。
如果您想了解更多信息,这里有一篇关于 BitFlex 的文章。您将开始发现,如果您正在寻找 Windows 资源管理器样式的控件,那么它通常永远不会开箱即用,并且由于 WPF 通常不与句柄一起使用,因此您无法像您一样围绕 Win32 或现有控件编写简单的包装器与 WinForms。
截屏:
For WPF, there isn't a way. You have to mimic it. See this example. A secondary (flaky solution) is to host a WinForms user control that inherits from TextBox and send the EM_SETCUEBANNER message to the edit control. ie.
Also, if you want to host a WinForm control approach, I have a framework that already includes this implementation called BitFlex Framework, which you can download for free here.
Here is an article about BitFlex if you want more information. You will start to find that if you are looking to have Windows Explorer style controls that this generally never comes out of the box, and because WPF does not work with handles generally you cannot write an easy wrapper around Win32 or an existing control like you can with WinForms.
Screenshot: