2009-09-22 73 views
2

如果文本框没有键盘焦点并且没有文本,则显示斜体灰色的“在此输入”文本“内部”。怎么样?什么不起作用:如何在WPF文本框中添加“输入此处”消息?

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

最好,我希望解决方案尽可能多的XAML和尽可能少的C#。也许我可以创建一个附加的属性来做一些魔术?

回答

4

您要找的是什么被称为水印。我不熟悉WPF,但在“google”上搜索WPF & Watermark会返回大量结果。

+0

+1你的答案:)。水印文本在WPF/Silverlight/whatnot中非常流行,并且有数百种解决方案在那里...... – Anvaka 2009-09-22 14:47:46

0

不是干净的解决方案,但你可以随时添加一个TextBlock覆盖的TextBox和改变它的Visible财产时TextBox获得或失去焦点。

讨厌的黑客,但有点创新?我可以得到布朗尼分吗? ;-)

0

为您的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"/> 
0

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

Look here