C# 在文本框中单击后删除文本

C# 在文本框中单击后删除文本,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,激活应用程序时,将出现一个文本为“hello”的文本框 我的问题是: 当您单击文本框以生成输入数据时,我想在XAML代码中自动删除文本,我该怎么做?处理事件,并在处理程序中清除文本。您还需要删除处理程序,以便在第二次单击文本框时不会丢失已输入的内容 大概是这样的: XAML: 您必须同时实现GetFocus和LostFocus事件。通过这种方式,如果未输入任何文本,则可以在失去焦点事件中设置默认文本 private const string defaultText = "Hello"; pri

激活应用程序时,将出现一个文本为“hello”的文本框

我的问题是:
当您单击文本框以生成输入数据时,我想在XAML代码中自动删除文本,我该怎么做?

处理事件,并在处理程序中清除文本。您还需要删除处理程序,以便在第二次单击
文本框时不会丢失已输入的内容

大概是这样的:

XAML:


您必须同时实现GetFocus和LostFocus事件。通过这种方式,如果未输入任何文本,则可以在失去焦点事件中设置默认文本

private const string defaultText = "Hello";

private void myTextBox_GotFocus(object sender, RoutedEventArgs e)
{
   myTextBox.Text = myTextBox.Text == defaultText ? string.Empty : myTextBox.Text;
}

private void myTextBox_LostFocus(object sender, RoutedEventArgs e)
{
   myTextBox.Text = myTextBox.Text == string.Empty ? defaultText : myTextBox.Text;
}

不需要代码隐藏的XAML实现。这是从我创建的自定义控件的模板复制的,您可能希望自己将其设置为自定义控件

基本思想是在
网格中有两个
文本框
e。顶部是用户与之交互的实际控件,但它是不可见的(其“不透明度”为零),除非它包含文本或具有焦点。底部包含提示文本。只有当它上面的
文本框
不可见时,它才可见,并且永远不会获得焦点

您可能需要在可编辑的
文本框
上处理绑定,但这应该可以让您开始了

    <Grid>
      <TextBox Text="This is the prompt text"
               FontStyle="Italic"
               Foreground="LightGray"
               Focusable="False">
      </TextBox>
      <TextBox Text="{Binding TextProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
               Focusable="True">
          <TextBox.Style>
              <Style TargetType="TextBox">
                  <Setter Property="Opacity"
                          Value="1" />
                  <Style.Triggers>
                      <MultiTrigger>
                          <MultiTrigger.Conditions>
                              <Condition Property="IsFocused"
                                         Value="False" />
                              <Condition Property="Text"
                                         Value="" />
                          </MultiTrigger.Conditions>
                          <Setter Property="Opacity"
                                  Value="0" />
                      </MultiTrigger>
                  </Style.Triggers>
              </Style>
          </TextBox.Style>
      </TextBox>
  </Grid>

我刚刚做到了:

XAML:


我想更新甜甜圈的答案。(适用于windows 8)

代码背后的代码是

public void TextBox_GotFocus(object sender, RoutedEventArgs e)
{

   TextBox tb = (TextBox)sender;

   if(tb.Text != "SOME DEFAULT TEXT")
   {

     String persentContentWithDefaultString = t.Text as string;
     tb.Text = persentContentWithDefaultString[0].ToString();
     // set cursor position 
      tb.Select(1, 0);         

      tb.GotFocus -= TextBox_GotFocus;
 }
}

实际上,在我的页面中,有两个文本框和一个按钮。[用户名、密码和单击按钮]。默认情况下,焦点转到我的第一个文本框,用户无法看到默认文本。

您也可以使用点击方法,它也可以工作

private void tb1_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        tb1.Text = "";
    }

请不要把答案弄得太复杂了几种剥猫皮的方法, 我想代码越少越好

彼得马克的选择是我的选择

将主Xaml窗口中的“GotFocus”添加到控件中,例如“textbox”

或者我喜欢这个选项

    private void Filename_GotFocus(object sender, RoutedEventArgs e)
    {
        Filename.clear();            
    }

问的问题只是清空文本框。

要详细说明甜甜圈的答案,以便您的文本框将保留用户输入的文本,除非它是纯空白,我使用以下解决方案:

XAML


+1这是一个更为MVVM友好的解决方案,因为它不需要任何代码隐藏。这也可以转换成ControlTemplate,这样你就可以用一个键来引用这个样式。当然,流行的响应就像广告中宣传的那样,一旦你开始键入,它将保留你已经键入的内容。每次获得焦点时,我的答案都会清除文本框。请详细说明最后一行代码好吗?它是做什么的,为什么有必要?谢谢。@Jakov,“您还需要删除该处理程序”->该处理程序是在XAML中分配的,GotFocus=“TextBox\u GotFocus”,这将删除它,以便下次不会丢失文本。与
 private void Filename_GotFocus(object sender, RoutedEventArgs e)
        {
            Filename.Text = "";            
        }
public void TextBox_GotFocus(object sender, RoutedEventArgs e)
{

   TextBox tb = (TextBox)sender;

   if(tb.Text != "SOME DEFAULT TEXT")
   {

     String persentContentWithDefaultString = t.Text as string;
     tb.Text = persentContentWithDefaultString[0].ToString();
     // set cursor position 
      tb.Select(1, 0);         

      tb.GotFocus -= TextBox_GotFocus;
 }
}
private void tb1_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        tb1.Text = "";
    }
    private void Filename_GotFocus(object sender, RoutedEventArgs e)
    {
        Filename.Text = "";            
    }
    private void Filename_GotFocus(object sender, RoutedEventArgs e)
    {
        Filename.clear();            
    }
<TextBox Text="Search..."
         Width="250"
         Foreground="LightGray"
         GotFocus="TextBox_GotFocus"
         LostFocus="TextBox_LostFocus" />
void TextBox_GotFocus( object sender, RoutedEventArgs e )
{
    TextBox box = sender as TextBox;
    box.Text = string.Empty;
    box.Foreground = Brushes.Black;
    box.GotFocus -= TextBox_GotFocus;
}

void TextBox.LostFocus( object sender, RoutedEventArgs e )
{
    TextBox box = sender as TextBox;
    if( box.Text.Trim().Equals( string.Empty ) )
    {
        box.Text = "Search...";
        box.Foreground = Brushes.LightGray;
        box.GotFocus += TextBox_GotFocus;
    }
}