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

總結:

  完活收工。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM