網站首頁 編程語言 正文
WPF中的各類控件元素, 都可以自由的設置其樣式。 諸如:
- 字體(FontFamily)
- 字體大小(FontSize)
- 背景顏色(Background)
- 字體顏色(Foreground)
- 邊距(Margin)
- 水平位置(HorizontalAlignment)
- 垂直位置(VerticalAlignment) 等等。
而樣式則是組織和重用以上的重要工具。不是使用重復的標記填充XAML, 通過Styles創建一系列封裝所有這些細節的樣式。然后通過Style屬性應用封裝好的樣式。這點類似于CSS樣式。然而, WPF樣式的功能更加強大, 如控件的行為。WPF的樣式還支持觸發器(后面章節會講到)。
示例
為了能夠直觀了解到樣式(Style)的使用方法, 下面演示一個從傳統的定義控件樣式到使用Style組織樣式的方法。
下面的例子中, 給4個TextBlock設置同樣的樣式: 字體、字體大小、字體顏色、加粗設置。
效果圖與實際代碼如下所示:
上面有講到, 樣式是組織和重用的工具。 而上面的代碼, 由于每個元素都是相同的, 但是每個元素XAML都重復定義。 下面將介紹通過樣式如何優化上面的代碼。
- 第一步: 在Resources目錄下定義一個TextBlockStyle的樣式, 完整代碼如下:
Style結構定義了一個 x:key 這點類似于Html中定義id和class, 然后css即可對相應的class和id樣式生效。TargetType 的設置為類型TextBlock, 設置目標類型靜態文本TextBlock。
- 第二步:通過控件的Style屬性 來引用x:key 的樣式, 代碼如下:
注意: 當控件引用了某個樣式, 在控件本身并沒有定義該屬性的情況下,優先使用樣式中的定義,否則優先控件本身的定義。如下所示, 樣式中設置了顏色為 Red, 但是控件本身又設置了Green, 那么控件的最終效果 Green。
觸發器介紹
顧名思義, 觸發器可以理解為, 當達到了觸發的條件, 那么就執行預期內的響應, 可以是樣式、數據變化、動畫等。觸發器通過 Style.Triggers集合連接到樣式中, 每個樣式都可以有任意多個觸發器, 并且每個觸發器都是 System.Windows.TriggerBase的派生類實例, 以下是觸發器的類型
- Trigger : 監測依賴屬性的變化、觸發器生效
- MultiTrigger : 通過多個條件的設置、達到滿足條件、觸發器生效
- DataTrigger : 通過數據的變化、觸發器生效
- MultiDataTrigger : 多個數據條件的觸發器
- EventTrigger : 事件觸發器, 觸發了某類事件時, 觸發器生效。
Trigger
下面以Border為例, 演示一個簡單的Trigger觸發器。當鼠標進入Border的范圍, 改變Border的背景顏色和邊框顏色, 當鼠標離開Border的范圍, 還原Border的顏色。代碼如下所示:
實際效果:
MultiTrigger
和Trugger類似, MultiTrigger可以設置多個條件滿足時, 觸發, 下面以TextBox為例, 做一個簡單的Demo當鼠標進入文本框的范圍, 并且光標設置到TextBox上, 則把TextBox的背景顏色改變成Red
實際效果:
EventTrigger
事件觸發器, 當觸發了某類事件, 觸發器執行響應。下面用實例演示, 為了能直觀感受到這類觸發器的作用, 用動畫演示其功能,下面使用了動畫相關的知識, 在學習到后面幾個章節, 讀者可以進行相關的內容學習。當鼠標進入按鈕的范圍中, 在0.02秒內, 把按鈕的字體變成18號當鼠標離開按鈕的范圍時, 在0.02秒內, 把按鈕的字體變成13號 。 代碼及效果如下所示:
實際效果:
結尾: 對于 DataTrigger / MultiDataTrigger 的功能類似, 只不過觸發條件變成了以數據的方式為條件, 這塊, 需要了解的可以自個兒進行研究。
原文鏈接:https://www.cnblogs.com/zh7791/p/11372623.html
相關推薦
- 2022-11-04 Android自定義View實現時鐘功能_Android
- 2022-09-05 淺談異常分類及異常處理機制
- 2021-11-10 Android?Studio設置繪制布局時的視圖_Android
- 2023-05-05 Linux中grep命令詳解_linux shell
- 2022-05-27 C++智能指針之shared_ptr詳解_C 語言
- 2022-06-02 Consul的HTTP?API和使用方法_云計算技術
- 2022-08-11 python實現對excel中需要的數據的單元格填充顏色_python
- 2022-10-10 redis緩存延時雙刪的原因分析_Redis
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支