如何在WPF TextBox中添加“在此处输入”消息?

时间:2009-09-22 14:30:35

标签: c# wpf xaml textbox

如果文本框没有键盘焦点且没有文本,则在其中显示斜体灰色“在此处输入”文本。怎么样?什么行不通:

  • 设置Text属性 - 它会混淆数据绑定。
  • 覆盖模板 - 无论如何它已经变得混乱和被覆盖。

最好,我希望解决方案尽可能多的XAML和尽可能少的C#。也许我可以创建一个会产生魔力的附属物?

5 个答案:

答案 0 :(得分:4)

您正在寻找的是水印。我对WPF不熟悉,但在“google”上搜索WPF & Watermark会返回大量结果。

答案 1 :(得分:1)

我见过的最好的解决方案是来自Kevin的WPF Bag-o-Tricks library InfoTextBox 。看看吧。

答案 2 :(得分:1)

为TextBox创建样式。这是添加“水印”的最简单方法之一。到你的TextBox。代码创建一个简单的样式并将其绑定到TextBox。

(代码摘录自:http://social.msdn.microsoft.com/Forums/vstudio/en-US/d565c79e-6b4a-44e2-a566-a4a622eab22f/how-to-set-watermark-for-textbox-in-simple-way?forum=wpf

<Window.Resources>
    <Style x:Key="MyWaterMarkStyle" TargetType="{x:Type TextBox}">           
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TextBox}">
                    <Grid>
                        <Border Background="White" BorderBrush="#FF7D8683" BorderThickness="1"/>
                        <ScrollViewer x:Name="PART_ContentHost" Margin="5,0,0,0" VerticalAlignment="Center" />
                        <Label Margin="5,0,0,0" x:Name="WaterMarkLabel" Content="{TemplateBinding Tag}" VerticalAlignment="Center"
                           Visibility="Collapsed" Foreground="Gray" FontFamily="Arial"/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="Text" Value=""/>
                            </MultiTrigger.Conditions>
                            <Setter Property="Visibility" TargetName="WaterMarkLabel" Value="Visible"/>
                        </MultiTrigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="Foreground" Value="DimGray"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

...

<TextBox Style="{StaticResource MyWaterMarkStyle}" Height="25" Tag="Water mark"/>

答案 3 :(得分:0)

不是最干净的解决方案,但您可以随时添加TextBlock覆盖TextBox,并在Visible获得或失去焦点时更改TextBox属性。

讨厌的黑客,但有点创新?我能获得布朗尼积分吗? ; - )

答案 4 :(得分:0)

我建议你使用Syncfusion for WPF。 它包含支持水印和其他功能的SfTextBoxExt。

Look here