zoukankan      html  css  js  c++  java
  • 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

    总结:

      完活收工。

    本文原创手打,转载请注明出处。
  • 相关阅读:
    Asp.net使用DevExpress的某些控件不能操作ViewState的解决方案
    关于 vue 循环组件,组件内有根据要求请求select下拉列表,组件内还有自身组件,select下拉列表无法正确获取的问题解决
    Vue+axios请求本地json
    关于vuevideoplayer 实现跳转到特定位置并自动播放
    VueQuillEditor回显不显示空格的处理办法
    elementui 的CascaderPanel级联面板类型 懒加载 回显
    elementui 中的文本域的autosize的意思
    解决 [Element Warn][Form]model is required for validate to work!
    初涉simulink
    arm学习计划
  • 原文地址:https://www.cnblogs.com/gaoshang212/p/3515562.html
Copyright © 2011-2022 走看看