最簡單的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="請輸入用戶名"/>
源代碼:
總結:
完活收工。