Удалить текст после нажатия в текстовом поле - PullRequest
10 голосов
/ 07 августа 2011

Когда вы активируете приложение, появится текстовое поле с текстом «привет».

Мой вопрос:
Когда вы нажимаете на текстовое поле для ввода данных, я хочу удалитьтекст автоматически в коде XAML, как мне это сделать?

Ответы [ 8 ]

28 голосов
/ 07 августа 2011

Обработайте событие UIElement.GotFocus и в обработчике удалите текст. Вы также захотите удалить обработчик, чтобы, если вы нажмете на TextBox во второй раз, вы не потеряете то, что уже ввели.

Примерно так:

XAML:

<TextBox Text="Hello" GotFocus="TextBox_GotFocus" />

Код-за:

public void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
   TextBox tb = (TextBox)sender;
   tb.Text = string.Empty;
   tb.GotFocus -= TextBox_GotFocus;
}
7 голосов
/ 08 августа 2011

Реализация XAML, не требующая выделения кода. Это скопировано из шаблона пользовательского элемента управления, который я создал, и вы, вероятно, захотите сделать этот элемент управления самостоятельно.

Основная идея состоит в том, что в Grid есть два TextBox. Верхний - это фактический элемент управления, с которым взаимодействует пользователь, но он невидим (его «Непрозрачность» равна нулю), если он не содержит текста или не имеет фокуса. В нижней части содержится текст подсказки. Он будет виден только тогда, когда сверху нет TextBox, и он никогда не получит фокус.

Вам, вероятно, придется возиться с привязкой к редактируемой TextBox, но с этого следует начать.

    <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>
5 голосов
/ 07 августа 2011

Вы должны реализовать оба события 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;
}
3 голосов
/ 09 октября 2015

Чтобы разъяснить ответ Donut, чтобы текстовое поле сохраняло текст, введенный пользователем, если это не чисто пробел, вот решение, которое я использую:

XAML

<TextBox Text="Search..."
         Width="250"
         Foreground="LightGray"
         GotFocus="TextBox_GotFocus"
         LostFocus="TextBox_LostFocus" />

C #

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;
    }
}
0 голосов
/ 11 февраля 2014

Пожалуйста, не усложняйте ответ несколькими способами снять кожу с кошки, но, чем меньше кода, тем лучше я бы предположил.

Выбор Петермака - это путь для меня.

Добавьте «GotFocus» в главном окне Xaml к элементу управления, например, «textbox»

    private void Filename_GotFocus(object sender, RoutedEventArgs e)
    {
        Filename.Text = "";            
    }

или мне нравится эта опция

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

заданный вопрос состоял в том, чтобы просто очистить текстовое поле.

0 голосов
/ 17 ноября 2013

Вы также можете использовать метод Tap, он также работает

private void tb1_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        tb1.Text = "";
    }
0 голосов
/ 24 октября 2013

Я хочу обновить Пончик ответ. (Применимо для 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;
 }
}

На самом деле на моей странице было два текстовых поля и одна кнопка. Имя пользователя, пароль и кнопка нажатия. По умолчанию фокус переходит к моему первому текстовому полю, и пользователь не смог увидеть текст по умолчанию.

0 голосов
/ 08 августа 2013

Я только что сделал это:

XAML:

<TextBox Name="Filename"
         Grid.Column="0" 
         Height="23" 
         Margin="10,9,0,0" 
         Text="Enter Export Filename here" 
         Width="193"
         GotFocus="Filename_GotFocus"
         />

Код:

 private void Filename_GotFocus(object sender, RoutedEventArgs e)
        {
            Filename.Text = "";            
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...