Итак, я новичок в WPF и XAML, но все, что я пытаюсь сделать, это добавить некоторый текст-заполнитель в TextBox в стандартной форме. Например, «Имя» будет отображаться в текстовом поле при запуске приложения. Когда пользователь щелкает в этом текстовом поле, «Имя» исчезает, и пользователь может свободно вводить свое имя. Если пользователь затем щелкает, ничего не вводя, текст заполнителя появляется снова. Но если бы они начали печатать и , то щелкнули мышью, то, что они набрали, все еще остается и не теряется.
Я думал, что эта функция будет встроена в Visual Studio для TextBoxes или какая-то другая вещь из набора инструментов уже, но если это так, я не могу ее найти. Я перепробовал все виды возни с текстом или содержимым текстового блока и т. Д. c.
Одно решение, которое я нашел не идеальным, заключается в следующем: я создал пользовательский элемент управления с двумя текстовыми полями - один для ввода пользователя и один для текста заполнителя. В зависимости от того, имеет ли пользовательский ввод фокус или текст-заполнитель теряет фокус, текст-заполнитель будет / не будет отображаться. Функциональность верна, но есть еще одна проблема. Я не могу по своему усмотрению изменять заполнитель в моем файле MainWindow.xaml, иначе я теряю возможность даже щелкать текстовое поле в моей форме. Поэтому мне нужно было бы создать пользовательский элемент управления для каждого варианта TextBox, который мне понадобится во всем приложении. Я чувствую, что могу создать пользовательский элемент управления с переменным текстом, но не могу понять, как это сделать.
Это действительно лучшее решение или я могу еще что-то сделать? Я чувствую, что, должно быть, все усложняю, чем на самом деле, но нигде не могу найти лучшего решения.
Мой пользовательский элемент управления xaml файл
<UserControl.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="FontFamily" Value="Garamond"/>
</Style>
</UserControl.Resources>
<Grid>
<TextBox x:Name="userInput" Height="15.5" HorizontalAlignment="Stretch" LostFocus="userInput_LostFocus"/>
<TextBox x:Name="waterMarkText" Height="15.5" HorizontalAlignment="Stretch" Text="Search" GotFocus="waterMarkText_GotFocus"/>
</Grid>
Мой пользовательский элемент управления xaml.cs file
private void userInput_LostFocus(object sender, RoutedEventArgs e)
{
if (string.IsNullOrEmpty(userInput.Text))
{
userInput.Visibility = System.Windows.Visibility.Collapsed;
waterMarkText.Visibility = System.Windows.Visibility.Visible;
}
}
private void waterMarkText_GotFocus(object sender, RoutedEventArgs e)
{
waterMarkText.Visibility = System.Windows.Visibility.Collapsed;
userInput.Visibility = System.Windows.Visibility.Visible;
userInput.Focus();
}
Как использовать пользовательский элемент управления
<local:WMTextBox x:Name="TBFirstName" Grid.Column="2" Grid.Row="2" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" Margin="10,0,0,2"
Opacity =" .65" Cursor="IBeam" BorderBrush="Black" BorderThickness="1"/>