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)
一个不需要代码隐藏的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)
您必须实现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)
| 归档时间: |
|
| 查看次数: |
59905 次 |
| 最近记录: |