如何将一些文本放入文本框中,当用户在其中键入内容时会自动将其删除?(在WPF中)
任何人都可以指向一个基本的Windows窗体TextBox的良好实现,它最初会显示水印文本,当光标进入时它会消失吗?我想我可以通过创造性地使用Enter和Leave事件来创建我自己的东西,但我确信在某个地方有一个完全可用的实现.我看到了WPF实现,如果有必要,我可以嵌套它,但原生的WinForms TextBox派生会更好.
到目前为止,我有这个; 尚未尝试过,但有没有人看到任何明显的问题?
public class WatermarkTextBox:TextBox
{
public string WatermarkText { get; set; }
public Color WatermarkColor { get; set; }
private Color TextColor { get; set; }
private bool isInTransition;
public WatermarkTextBox()
{
WatermarkColor = SystemColors.GrayText;
}
private bool HasText { get { return Text.IsNotNullOrBlankOr(WatermarkText); }}
protected override void OnEnter(EventArgs e)
{
base.OnEnter(e);
if (HasText) return;
isInTransition = true;
ForeColor = TextColor;
Text = String.Empty;
isInTransition = false;
}
protected override void OnForeColorChanged(EventArgs e)
{
base.OnForeColorChanged(e);
if (!isInTransition) …Run Code Online (Sandbox Code Playgroud) 如何在WPAM中以XAML格式(可视化树)获取现有控件的controltemplate?这有助于在现有模板的帮助下创建新的controltemplate.
System.Windows.Forms.TextBox使用C#在.Net 2.0中实现水印功能的最佳方法是什么?
编辑:
使用CodeProject中的现成组件非常简单.它还带有代码项目开放许可证(CPOL).
在 WinForms 项目中,我知道如何将占位符文本添加到常规文本框。但 ToolStripTextBox 似乎不是常规文本框。其一,它不会公开句柄(这是通过 Win API 设置占位符文本所需的)。
那么,如何在 ToolStripTextBox 上设置占位符文本或获取其 .Handle 属性?
我觉得我错过了一些非常明显的东西.
我知道表格一般都有一个Handle属性,但我使用的是a System.Windows.Controls.TextBox,它没有Handle属性.
我如何访问TextBox手柄?我注意到RichTextBox有Handle属性,所以为什么不经常TextBox?
我已经阅读了这个 将占位符文本添加到文本框中
问题是,占位符TextBox必须易于重用.使用XAML或Code.也许是这样的
<my:TextBoxPlaceholder Placeholder="this is the placeholder"/>
Run Code Online (Sandbox Code Playgroud)
要么
<TextBox Placeholder="this is the placeholder"
Type="/*staticresources*/PlaceholderTextBox"/>
Run Code Online (Sandbox Code Playgroud)
这就是我所说的.(我从Instagram Beta获得的屏幕截图).

如您所见,在第二张图片中,"添加注释"占位符位于TextBox的最顶层,它覆盖了条带线.占位符是顶部的图片还是TextBlock?