WPF 最简单的TextBox水印

最简单的TextBox加水印的方法,但是不具有很强的通用性。

如果你只是使用一次,或者用的不多,偷偷懒可以使用。

因为此方法只需要修改TextBox的Template,而不用重写何任代码。

注意:

       1、因为此方法用到 触发器(Trggier),故只适用于WPF,而不适用于SilverLight。

       2、因为此方法用到 触发器(Trggier),所以也只适用于TextBox,不适用PasswordBox,因为Password的Password不是依赖项属性。不能作用于Trggier。

       3、贴出此方法只是为了提供一个思路,而我本人不推荐这么做。(下两篇我会介绍其它两种常规方法)

       4、我从小语文不好,总会错别字,写的不对或不好的地方,可以喷,但不要打脸。

 

先简单说一下,然后贴代码。

原理:

  修改TextBox的Template,添加多条件触发器,当Text="" 和 IsFocused="False"的时候,让水印的文字的TextBlock 显示出来(Visibility = "Visible")

<MultiTrigger>

    <MultiTrigger.Conditions>

        <Condition Property="Text" Value=""/>

        <Condition Property="IsFocused" Value="False"/>

    </MultiTrigger.Conditions>

    <Setter Property="Visibility" TargetName="WARKTEXT" Value="Visible"/>

</MultiTrigger>

代码(Xaml):

  此Xaml大部份为VS生成,只是进行了简单的修改,可能不同版本的vs或Blend生成的略有差别。最终解释权规 微软 所有。

 1 <Style x:Key="WarkTextBoxStyle" TargetType="{x:Type TextBox}">

 2             <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>

 3             <Setter Property="BorderBrush" Value="#FFABADB3"/>

 4             <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>

 5             <Setter Property="BorderThickness" Value="1"/>

 6             <Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>

 7             <Setter Property="HorizontalContentAlignment" Value="Left"/>

 8             <Setter Property="FocusVisualStyle" Value="{x:Null}"/>

 9             <Setter Property="AllowDrop" Value="True"/>

10             <Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>

11             <Setter Property="Stylus.IsFlicksEnabled" Value="False"/>

12             <Setter Property="Template">

13                 <Setter.Value>

14                     <ControlTemplate TargetType="{x:Type TextBox}">

15                         <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">

16                             <Grid>

17                                 <ScrollViewer x:Name="PART_ContentHost" Focusable="False" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/>

18                                 <TextBlock x:Name="WARKTEXT" Text="{TemplateBinding Tag}" Foreground="#7F2F2F2F" Visibility="Collapsed" />

19                             </Grid>

20                         </Border>

21                         <ControlTemplate.Triggers>

22                             <Trigger Property="IsEnabled" Value="False">

23                                 <Setter Property="Opacity" TargetName="border" Value="0.56"/>

24                             </Trigger>

25                             <Trigger Property="IsMouseOver" Value="True">

26                                 <Setter Property="BorderBrush" TargetName="border" Value="#FF7EB4EA"/>

27                             </Trigger>

28                             <Trigger Property="IsKeyboardFocused" Value="True">

29                                 <Setter Property="BorderBrush" TargetName="border" Value="#FF569DE5"/>

30                             </Trigger>

31                             <MultiTrigger>

32                                 <MultiTrigger.Conditions>

33                                     <Condition Property="Text" Value=""/>

34                                     <Condition Property="IsFocused" Value="False"/>

35                                 </MultiTrigger.Conditions>

36                                 <Setter Property="Visibility" TargetName="WARKTEXT" Value="Visible"/>

37                             </MultiTrigger>

38                         </ControlTemplate.Triggers>

39                     </ControlTemplate>

40                 </Setter.Value>

41             </Setter>

42             <Style.Triggers>

43                 <MultiTrigger>

44                     <MultiTrigger.Conditions>

45                         <Condition Property="IsInactiveSelectionHighlightEnabled" Value="True"/>

46                         <Condition Property="IsSelectionActive" Value="False"/>

47                     </MultiTrigger.Conditions>

48                     <Setter Property="SelectionBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/>

49                 </MultiTrigger>

50             </Style.Triggers>

51         </Style>

使用:

1 <TextBox Style="{StaticResource WarkTextBoxStyle}" Tag="请输入用户名"/>

源代码:

  WarkTextBox.rar

总结:

  完活收工。

 

你可能感兴趣的:(text)