亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

WPF TextBox和PasswordBox添加水印

2020-01-24 00:56:48
字體:
來源:轉載
供稿:網友

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

Textbox加水印

Textbox加水印,需要一個VisualBrush和觸發器驗證Text是否為空,在空的時候設置背景的Brush就可以實現水印效果。

<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加水印,需要添加判斷輸入非空的依賴屬性,因為PasswordBox本身沒有這個屬性。

通過一個PasswordLength函數判斷密碼框的長度是不是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 新增內容

將TextBlock暴露出來,做一個可以修改水印的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;      }    }  }

調用只有一句話

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美大尺度激情区在线播放| 国产婷婷97碰碰久久人人蜜臀| 92裸体在线视频网站| 亚洲视频在线观看视频| 最新中文字幕亚洲| 97视频在线播放| 欧美丰满老妇厨房牲生活| 91精品视频免费观看| 国产成人精品一区二区在线| 九九热精品视频在线播放| 亚洲色图五月天| 久久69精品久久久久久久电影好| 91av福利视频| 亚洲欧美视频在线| 97精品久久久| 91精品国产91久久久久久不卡| 国产91免费看片| 亚洲精品一区二区网址| 国产精品国产三级国产专播精品人| 亚洲黄色在线观看| 91社区国产高清| 青青草国产精品一区二区| 亚洲精品aⅴ中文字幕乱码| 成人久久精品视频| 欧美激情国产日韩精品一区18| 国产97在线|日韩| 国产香蕉一区二区三区在线视频| 亚洲成人中文字幕| 欧美激情国产精品| 欧美激情视频一区二区三区不卡| 久久久久久久网站| 日韩日本欧美亚洲| 国产精品久久色| 久久久人成影片一区二区三区| 久久久久久91香蕉国产| 97在线视频免费播放| 中文字幕欧美日韩va免费视频| 5566成人精品视频免费| 91免费国产视频| 色综合视频一区中文字幕| 国产精品偷伦视频免费观看国产| 亚洲福利视频网| 久久九九精品99国产精品| 黄色一区二区在线观看| 欧美高清电影在线看| 日韩欧美在线视频观看| 日韩av在线影视| 国产a∨精品一区二区三区不卡| 亚洲色图狂野欧美| 久久久久国色av免费观看性色| 亚洲免费电影一区| 国产91在线播放精品91| 国产91精品视频在线观看| 久久久久久欧美| 亚洲伊人久久综合| 国产一区二区美女视频| 国产亚洲精品久久久优势| 91精品国产91久久| 国产精品成人国产乱一区| 欧美日韩不卡合集视频| 国产亚洲美女精品久久久| 亚洲欧美日韩综合| 欧美亚洲视频在线看网址| 68精品久久久久久欧美| 亚洲精品电影网在线观看| 亚洲free性xxxx护士白浆| 亚洲成人国产精品| 欧美另类第一页| 成人动漫网站在线观看| 亚洲福利视频网站| 97视频免费看| 57pao国产精品一区| 日韩av免费观影| 久久久久久久久久久国产| 91美女福利视频高清| 亚洲精品国产suv| 中文字幕亚洲一区| 亚洲欧美在线第一页| 91欧美精品成人综合在线观看| 国产美女91呻吟求| 亚洲精品小视频| 国产精品久久一区主播| 国产精品第一区| 欧美黑人性猛交| 亚洲最新中文字幕| 欧美高清一级大片| 亚洲人成在线一二| 国产精品美女视频网站| 日韩一区二区久久久| 亚洲精品国产品国语在线| 亚洲一区二区三区在线免费观看| 久久国产加勒比精品无码| 久久av在线看| 亚洲电影中文字幕| 91精品国产高清自在线看超| 91九色单男在线观看| 国产精品精品视频| 在线观看欧美www| 成人黄色短视频在线观看| 17婷婷久久www| 成人做爰www免费看视频网站| 亚洲男人第一网站| 成人黄色短视频在线观看| 国产精品综合久久久| 久久成人国产精品| 欧美性猛交视频| 亚洲欧美国产日韩中文字幕| 国产精品午夜国产小视频| 日韩精品免费一线在线观看| 中文字幕精品一区久久久久| 成人激情视频小说免费下载| 亚洲天堂久久av| 一区二区成人av| 久久久国产一区二区三区| 亚洲成人激情小说| 国产精品视频999| 国产精品第七十二页| 日韩色av导航| 亚洲国产另类久久精品| 亚洲成**性毛茸茸| 欧美大成色www永久网站婷| 久久成人一区二区| 免费97视频在线精品国自产拍| 欧美一级电影久久| 日韩美女视频中文字幕| 2018中文字幕一区二区三区| 久久久久久久亚洲精品| 日韩成人中文电影| 精品久久久久久久久久国产| 色噜噜国产精品视频一区二区| 亚洲国语精品自产拍在线观看| 久久久极品av| 97在线看福利| 欧美视频专区一二在线观看| 日韩a**中文字幕| 久久综合久久美利坚合众国| 人九九综合九九宗合| 亚洲免费高清视频| 日韩欧美有码在线| 亚洲wwwav| 岛国精品视频在线播放| 欧美最顶级的aⅴ艳星| 懂色aⅴ精品一区二区三区蜜月| 欧美成人午夜激情视频| 久久成人人人人精品欧| 91精品国产91久久久久久久久| 国内精品模特av私拍在线观看| 日韩成人中文字幕| 欧美高清在线视频观看不卡| 国产精品亚洲欧美导航| 欧美日本高清一区| 久久精品91久久香蕉加勒比| 欧美日韩一区二区三区在线免费观看| 91影院在线免费观看视频| 久久6免费高清热精品| 日韩精品视频免费| 日韩欧美aaa| 日本最新高清不卡中文字幕| 在线观看中文字幕亚洲| 精品毛片三在线观看| 亚洲天堂一区二区三区| 亚洲人成欧美中文字幕| 97国产suv精品一区二区62| 日韩美女视频免费在线观看|