我正在寻找一种方法来添加占位符文本到文本框中,就像你可以在html5中使用文本框。
即,如果文本框没有文本,则它添加文本Enter some text here
,当用户点击它时,占位符文本消失并且允许用户输入他们自己的文本,并且如果文本框失去焦点并且仍然没有文本,则该占位符被添加回文本框。
发布于 2012-08-09 05:34:04
这不就是这样的东西吗:
Textbox myTxtbx = new Textbox();
myTxtbx.Text = "Enter text here...";
myTxtbx.GotFocus += GotFocus.EventHandle(RemoveText);
myTxtbx.LostFocus += LostFocus.EventHandle(AddText);
public void RemoveText(object sender, EventArgs e)
{
if (myTxtbx.Text == "Enter text here...")
{
myTxtbx.Text = "";
}
}
public void AddText(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(myTxtbx.Text))
myTxtbx.Text = "Enter text here...";
}
这只是伪代码,但概念是存在的。
发布于 2014-01-30 02:17:17
你可以使用这个,它对我来说很有效,而且是非常简单的解决方案。
<Style x:Key="placeHolder" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Grid>
<TextBox Text="{Binding Path=Text,
RelativeSource={RelativeSource TemplatedParent},
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"
x:Name="textSource"
Background="Transparent"
Panel.ZIndex="2" />
<TextBox Text="{TemplateBinding Tag}" Background="{TemplateBinding Background}" Panel.ZIndex="1">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Foreground" Value="Transparent"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Text, Source={x:Reference textSource}}" Value="">
<Setter Property="Foreground" Value="LightGray"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
用法:
<TextBox Style="{StaticResource placeHolder}" Tag="Name of customer" Width="150" Height="24"/>
发布于 2014-03-14 20:49:54
不需要处理焦点进入和焦点离开事件来设置和删除占位符文本,可以使用Windows SendMessage函数将EM_SETCUEBANNER
消息发送到我们的文本框来为我们做这项工作。
这可以通过两个简单的步骤来完成。首先,我们需要公开Windows SendMessage
函数。
private const int EM_SETCUEBANNER = 0x1501;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern Int32 SendMessage(IntPtr hWnd, int msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)]string lParam);
然后,只需使用textbox的句柄、EM_SETCUEBANNER的值和我们想要设置的文本来调用该方法。
SendMessage(textBox1.Handle, EM_SETCUEBANNER, 0, "Username");
SendMessage(textBox2.Handle, EM_SETCUEBANNER, 0, "Password");
https://stackoverflow.com/questions/11873378
复制相似问题