单击文本框后删除文本

Wha*_*sUP 11 .net c# wpf xaml

激活应用程序时,将出现带有文本"hello"的文本框.

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

Don*_*nut 29

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

像这样的东西:

XAML:

<TextBox Text="Hello" GotFocus="TextBox_GotFocus" />
Run Code Online (Sandbox Code Playgroud)

代码隐藏:

public void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
   TextBox tb = (TextBox)sender;
   tb.Text = string.Empty;
   tb.GotFocus -= TextBox_GotFocus;
}
Run Code Online (Sandbox Code Playgroud)


Rob*_*ney 7

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

基本的想法是,有两个TextBoxes Grid.最上面的一个是用户与之交互的实际控件,但它是不可见的(它的'Opacity'为零),除非它包含文本或具有焦点.底部包含提示文本.它只有在它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>
Run Code Online (Sandbox Code Playgroud)


Cha*_*thJ 5

您必须实现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;
}
Run Code Online (Sandbox Code Playgroud)