2009-09-22 100 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