国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

WPF TextBox和PasswordBox添加水印

2020-01-24 00:56:48
字體:
供稿:網(wǎng)友

本文實(shí)例為大家分享TextBox和PasswordBox加水印的方法,供大家參考,具體內(nèi)容如下

Textbox加水印

Textbox加水印,需要一個(gè)VisualBrush和觸發(fā)器驗(yàn)證Text是否為空,在空的時(shí)候設(shè)置背景的Brush就可以實(shí)現(xiàn)水印效果。

<TextBox Name="txtBoxName" Width="120" Height="23">      <TextBox.Resources>        <VisualBrush x:Key="HelpBrush" TileMode="None" Opacity="0.3" Stretch="None" AlignmentX="Left">          <VisualBrush.Visual>            <TextBlock FontStyle="Italic" Text="水印效果"/>          </VisualBrush.Visual>        </VisualBrush>      </TextBox.Resources>      <TextBox.Style>        <Style TargetType="TextBox">          <Setter Property="Height" Value="23"/>          <Setter Property="HorizontalAlignment" Value="Left"/>          <Setter Property="VerticalAlignment" Value="Top"/>          <Style.Triggers>            <Trigger Property="Text" Value="{x:Null}">              <Setter Property="Background" Value="{StaticResource HelpBrush}"/>            </Trigger>            <Trigger Property="Text" Value="">              <Setter Property="Background" Value="{StaticResource HelpBrush}"/>            </Trigger>          </Style.Triggers>        </Style>      </TextBox.Style>    </TextBox>

PasswordBox加水印

PasswordBox加水印,需要添加判斷輸入非空的依賴屬性,因?yàn)镻asswordBox本身沒有這個(gè)屬性。

通過一個(gè)PasswordLength函數(shù)判斷密碼框的長度是不是0,如果是0則顯示背景水印,否則就隱藏。

屬性部分代碼,CS文件

public class PasswordBoxMonitor : DependencyObject  {    public static bool GetIsMonitoring(DependencyObject obj)    {      return (bool)obj.GetValue(IsMonitoringProperty);    }    public static void SetIsMonitoring(DependencyObject obj, bool value)    {      obj.SetValue(IsMonitoringProperty, value);    }    public static readonly DependencyProperty IsMonitoringProperty =      DependencyProperty.RegisterAttached("IsMonitoring", typeof(bool), typeof(PasswordBoxMonitor), new UIPropertyMetadata(false, OnIsMonitoringChanged));    public static int GetPasswordLength(DependencyObject obj)    {      return (int)obj.GetValue(PasswordLengthProperty);    }    public static void SetPasswordLength(DependencyObject obj, int value)    {      obj.SetValue(PasswordLengthProperty, value);    }    public static readonly DependencyProperty PasswordLengthProperty =      DependencyProperty.RegisterAttached("PasswordLength", typeof(int), typeof(PasswordBoxMonitor), new UIPropertyMetadata(0));    private static void OnIsMonitoringChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)    {      var pb = d as PasswordBox;      if (pb == null)      {        return;      }      if ((bool)e.NewValue)      {        pb.PasswordChanged += PasswordChanged;      }      else      {        pb.PasswordChanged -= PasswordChanged;      }    }    static void PasswordChanged(object sender, RoutedEventArgs e)    {      var pb = sender as PasswordBox;      if (pb == null)      {        return;      }      SetPasswordLength(pb, pb.Password.Length);    }  }

XMAL代碼

<PasswordBox Name="pb" Width="120" VerticalAlignment="Bottom" Height="35">      <PasswordBox.Style>        <Style TargetType="PasswordBox">          <Setter Property="Height" Value="23"/>          <Setter Property="HorizontalAlignment" Value="Left"/>          <Setter Property="VerticalAlignment" Value="Top"/>          <Setter Property="local:PasswordBoxMonitor.IsMonitoring" Value="True"/>          <Setter Property="Template">            <Setter.Value>              <ControlTemplate TargetType="{x:Type PasswordBox}">                <Border Name="Bd" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" SnapsToDevicePixels="True">                  <Grid>                    <ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>                    <StackPanel Orientation="Horizontal" Visibility="Collapsed" Name="myStackPanel">                      <TextBlock HorizontalAlignment="Left" VerticalAlignment="Center" Foreground="LightGray" Text="水印效果"/>                    </StackPanel>                  </Grid>                </Border>                <ControlTemplate.Triggers>                  <Trigger Property="IsEnabled" Value="false">                    <Setter Property="Visibility" TargetName="myStackPanel" Value="Collapsed"/>                  </Trigger>                  <Trigger Property="local:PasswordBoxMonitor.PasswordLength" Value="0">                    <Setter Property="Visibility" TargetName="myStackPanel" Value="Visible"/>                  </Trigger>                </ControlTemplate.Triggers>              </ControlTemplate>            </Setter.Value>          </Setter>        </Style>      </PasswordBox.Style>    </PasswordBox>

效果圖

2016-09-07 新增內(nèi)容

將TextBlock暴露出來,做一個(gè)可以修改水印的Textbox控件

<TextBox x:Class="OracleCodeGenerator.watermarkTextBox"       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"        xmlns:local="clr-namespace:OracleCodeGenerator"       mc:Ignorable="d"        d:DesignHeight="300" d:DesignWidth="300" Name="tb">  <TextBox.Resources>    <VisualBrush x:Key="HelpBrush" TileMode="None" Opacity="0.3" Stretch="None" AlignmentX="Left">      <VisualBrush.Visual>        <TextBlock Text="{Binding TbText,ElementName=tb}" FontStyle="Italic"/>      </VisualBrush.Visual>    </VisualBrush>  </TextBox.Resources>  <TextBox.Style>    <Style TargetType="TextBox">      <Setter Property="Height" Value="23"/>      <Setter Property="HorizontalAlignment" Value="Left"/>      <Setter Property="VerticalAlignment" Value="Top"/>      <Style.Triggers>        <Trigger Property="Text" Value="{x:Null}">          <Setter Property="Background" Value="{StaticResource HelpBrush}"/>        </Trigger>        <Trigger Property="Text" Value="">          <Setter Property="Background" Value="{StaticResource HelpBrush}"/>        </Trigger>      </Style.Triggers>    </Style>  </TextBox.Style></TextBox>
public partial class watermarkTextBox : TextBox  {    public watermarkTextBox()    {      InitializeComponent();    }    private string tbText;    public string TbText    {      get      {        return tbText;      }      set      {        tbText = value;      }    }  }

調(diào)用只有一句話

復(fù)制代碼 代碼如下:
<local:watermarkTextBox Width="150" TbText="我是水印"/>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 朝阳市| 土默特左旗| 天门市| 陕西省| 嘉兴市| 同江市| 石阡县| 凭祥市| 穆棱市| 凭祥市| 卓资县| 霍山县| 北海市| 中江县| 松溪县| 南阳市| 营口市| 临夏县| 大英县| 定陶县| 北票市| 遂宁市| 赞皇县| 通化县| 罗田县| 中西区| 巴楚县| 南阳市| 博白县| 平凉市| 崇明县| 封开县| 崇信县| 炉霍县| 乌恰县| 纳雍县| 永济市| 盈江县| 靖江市| 且末县| 澜沧|