水印文本框

来源:https://www.cnblogs.com/writecode/archive/2019/11/29/11955919.html
-Advertisement-
Play Games

先看下效果: 流程: 1.新建WatermarkTextBox類,繼承自TextBox。添加依賴項屬性Watermark(水印)、WatermarkForeground(水印前景色)。 1 public class WatermarkTextBox : TextBox 2 { 3 #region D ...


  先看下效果:

  流程:

  1.新建WatermarkTextBox類,繼承自TextBox。添加依賴項屬性Watermark(水印)、WatermarkForeground(水印前景色)。

 1     public class WatermarkTextBox : TextBox
 2     {
 3         #region DependencyProperties
 4         public string Watermark
 5         {
 6             get { return (string)GetValue(WatermarkProperty); }
 7             set { SetValue(WatermarkProperty, value); }
 8         }
 9 
10         // Using a DependencyProperty as the backing store for Watermark.  This enables animation, styling, binding, etc...
11         public static readonly DependencyProperty WatermarkProperty =
12             DependencyProperty.Register("Watermark", typeof(string), typeof(WatermarkTextBox), new PropertyMetadata(default(string)));
13 
14         public Brush WatermarkForeground
15         {
16             get { return (Brush)GetValue(WatermarkForegroundProperty); }
17             set { SetValue(WatermarkForegroundProperty, value); }
18         }
19 
20         // Using a DependencyProperty as the backing store for WatermarkForeground.  This enables animation, styling, binding, etc...
21         public static readonly DependencyProperty WatermarkForegroundProperty =
22             DependencyProperty.Register("WatermarkForeground", typeof(Brush), typeof(WatermarkTextBox), new PropertyMetadata(new SolidColorBrush(Colors.Gray)));
23 
24         #endregion
25 
26         static WatermarkTextBox()
27         {
28             DefaultStyleKeyProperty.OverrideMetadata(typeof(WatermarkTextBox), new FrameworkPropertyMetadata(typeof(WatermarkTextBox)));
29         }
30     }

  2.編寫WatermarkTextBox樣式。

 1             <Style x:Key="WatermarkTextBoxStyle" TargetType="{x:Type local:WatermarkTextBox}">
 2                 <Setter Property="SnapsToDevicePixels" Value="True" />
 3                 <Setter Property="HorizontalContentAlignment" Value="Left" />
 4                 <Setter Property="VerticalContentAlignment" Value="Center" />
 5                 <Setter Property="BorderThickness" Value="1" />
 6                 <Setter Property="BorderBrush" Value="Black" />
 7                 <Setter Property="Padding" Value="4,2" />
 8                 <Setter Property="Template">
 9                     <Setter.Value>
10                         <ControlTemplate TargetType="{x:Type local:WatermarkTextBox}">
11                             <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
12                                 <Grid>
13                                     <ScrollViewer Name="PART_ContentHost" Focusable="False" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" />
14                                     <TextBlock x:Name="PART_Watermark"
15                                                Margin="{TemplateBinding Padding}"
16                                                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
17                                                VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
18                                                FontFamily="{TemplateBinding FontFamily}"
19                                                FontSize="{TemplateBinding FontSize}"
20                                                FontWeight="{TemplateBinding FontWeight}"
21                                                Foreground="{TemplateBinding WatermarkForeground}"
22                                                Text="{TemplateBinding Watermark}"
23                                                Visibility="Collapsed" />
24                                 </Grid>
25                             </Border>
26                             <ControlTemplate.Triggers>
27                                 <MultiTrigger>
28                                     <MultiTrigger.Conditions>
29                                         <Condition Property="IsFocused" Value="False" />
30                                         <Condition Property="Text" Value="" />
31                                     </MultiTrigger.Conditions>
32                                     <Setter TargetName="PART_Watermark" Property="Visibility" Value="Visible" />
33                                 </MultiTrigger>
34                                 <Trigger Property="IsMouseOver" Value="True">
35                                     <Setter Property="BorderBrush" Value="#FF7EB4EA" />
36                                 </Trigger>
37                                 <Trigger Property="IsKeyboardFocused" Value="True">
38                                     <Setter Property="BorderBrush" Value="#FF569DE5" />
39                                 </Trigger>
40                                 <Trigger Property="IsEnabled" Value="False">
41                                     <Setter Property="Opacity" Value="0.56" />
42                                 </Trigger>
43                             </ControlTemplate.Triggers>
44                         </ControlTemplate>
45                     </Setter.Value>
46                 </Setter>
47             </Style>

  3.界面引用。

1         <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Horizontal">
2             <local:WatermarkTextBox x:Name="txt"
3                                     Width="200" Height="28"
4                                     Style="{StaticResource WatermarkTextBoxStyle}"
5                                     Watermark="請輸入..." />
6             <Button Width="60" Height="28"
7                     Margin="10,0,0,0"
8                     Click="BtnConfirm_Click" Content="確定" />
9         </StackPanel>

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 明天又雙叒叕是一年一度的七夕戀愛節了! 又是一波絕好的機會!恩愛秀起來! 購物車清空!禮物送起來!朋友圈曬起來! 等等! 什麼?! 你還沒準備好七夕禮物麽? 但其實你不知道要送啥? 原來又雙叒叕要到了 全民不知道送什麼禮物的系列日子了… 需要Python軟體工具和學習資料的小伙伴可以點擊下方鏈接自行 ...
  • 下載安裝 從 "https://golang.org/dl/" 下載最新的安裝包。 windows直接執行exe,按指示進行安裝(預設安裝目錄是:C:\Go) linxu解壓後複製到你喜歡目錄就行(一般放在:/usr/local/go) 配置環境變數 首先,應在全局環境變數里增加: ,指定 的安裝位 ...
  • Springcloud Aibaba現在這麼火,我一直想寫個基於Springcloud Alibaba一步一步構建微服務架構的系列博客,終於下定決心從今天開始本系列文章的第一篇 基礎環境準備。 該系列文章內容主要基於三個微服務:用戶服務 ,訂單服務 ,產品服務 用到的組件有: 註冊中心、配置中心 N ...
  • 關鍵詞:工作流定時任務 流程引擎定時任務設置 工作流系統定時任務配置 開源工作流引擎 開源工作流系統 一、定時任務的作用 發送郵件,發送簡訊。 處理節點自動執行的任務。比如:一個節點的待辦工作是機器執行的,需要等到滿足一定的條件才能運行下去,我們稱為自動執行任務節點,這個任務叫自動執行任務。 啟動定... ...
  • 這是Orleans團隊的帖子。Orleans是用於使用.NET構建分散式應用程式的跨平臺框架。有關更多信息,請參見 "https://github.com/dotnet/orleans" 。 我們很高興宣佈Orleans 3.0版本。自Orleans 2.0以來,進行了大量改進和修複,並提供了一些新 ...
  • 一、概述 1、通過反射可以提供類型信息,從而使得我們開發人員在運行時能夠利用這些信息構造和使用對象 2、反射機制允許程式在執行過程中動態地添加各種功能 二、運行時類型標識 1、運行時類型標誌(RTTI),可以在程式執行期間判斷對象類型。例如使用他能夠確切的知道基類引用指向了什麼類型對象。 2、運行時 ...
  • 在我們基於微信開發框架各種微信項目的時候,往往一個場景一個菜單集合,多個微信項目就可能存在多個不同的菜單組合。由於微信菜單的數量限制,我們想測試一下其他不同項目的菜單功能的時候,如果沒有一個很好的管理方案,就會顯得很麻煩,本篇隨筆介紹如何在管理微信菜單的基礎上增加一個菜單組的概念,以便隨時激活某個項... ...
  • 在上文ASP.NET MVC5基礎 – MVC文件架構中我們簡單瞭解了下控制器Controller的作用,本文我將詳細介紹控制器Controller的使用方法。 Controller的運行過程 上文我們已經講到,控制器負責響應瀏覽器傳送過來的所有請求。在MVC中,每一個瀏覽器請求都映射到一個控制器( ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...