Implementación de XAML que no requiere código subyacente. Esto se copia de la plantilla de un control personalizado que construí, y es probable que desee hacer esto como un control personalizado.
La idea básica es que hay dos TextBox
es en un Grid
. El de arriba es el control real con el que el usuario interactúa, pero es invisible (su 'Opacidad' es cero) a menos que contenga texto o tenga el foco. El de abajo contiene el texto del mensaje. Solo será visible cuando el TextBox
encima no esté, y nunca se enfocará.
Probablemente tendrá que perder el enlace en el TextBox
editable, pero esto debería comenzar.
<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>
Igual que http://stackoverflow.com/questions/833943/watermark-hint-text-placeholder-textbox-in-wpf –