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