首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >向文本框添加占位符文本

向文本框添加占位符文本
EN

Stack Overflow用户
提问于 2012-08-09 05:22:29
回答 26查看 337.2K关注 0票数 168

我正在寻找一种方法来添加占位符文本到文本框中,就像你可以在html5中使用文本框。

即,如果文本框没有文本,则它添加文本Enter some text here,当用户点击它时,占位符文本消失并且允许用户输入他们自己的文本,并且如果文本框失去焦点并且仍然没有文本,则该占位符被添加回文本框。

EN

回答 26

Stack Overflow用户

回答已采纳

发布于 2012-08-09 05:34:04

这不就是这样的东西吗:

代码语言:javascript
复制
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...";
}

这只是伪代码,但概念是存在的。

票数 103
EN

Stack Overflow用户

发布于 2014-01-30 02:17:17

你可以使用这个,它对我来说很有效,而且是非常简单的解决方案。

代码语言:javascript
复制
    <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>

用法:

代码语言:javascript
复制
<TextBox Style="{StaticResource placeHolder}" Tag="Name of customer" Width="150" Height="24"/>

‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎

票数 102
EN

Stack Overflow用户

发布于 2014-03-14 20:49:54

不需要处理焦点进入和焦点离开事件来设置和删除占位符文本,可以使用Windows SendMessage函数将EM_SETCUEBANNER消息发送到我们的文本框来为我们做这项工作。

这可以通过两个简单的步骤来完成。首先,我们需要公开Windows SendMessage函数。

代码语言:javascript
复制
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的值和我们想要设置的文本来调用该方法。

代码语言:javascript
复制
SendMessage(textBox1.Handle, EM_SETCUEBANNER, 0, "Username");
SendMessage(textBox2.Handle, EM_SETCUEBANNER, 0, "Password");

参考:Set placeholder text for textbox (cue text)

票数 54
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11873378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档