WPF 觸發器 Trigger

觸發器 Trigger

觸發器(Trigger)是 WPF 中的一種機制:
當某個條件滿足時,自動改變控件的某些屬性,比如顏色、大小、透明度等。

換句話說,就是"如果……那么就……" 的一種規則。

常見觸發器類型:

類型說明
Trigger依賴屬性變化時觸發
DataTrigger綁定的數據變化時觸發
EventTrigger事件發生時觸發
MultiTrigger多個條件同時滿足時觸發
MultiDataTrigger多個數據條件同時滿足時觸發


1. Trigger —— 屬性值觸發(最基礎)

例如,當按鈕被鼠標懸停(IsMouseOver = true)時,改變背景色:

<Button Content="鼠標懸停變色"><Button.Style><Style TargetType="Button"><Style.Triggers><Trigger Property="IsMouseOver" Value="True"> <!--Is... 觸發條件--><Setter Property="Background" Value="LightGreen"/><Setter Property="Foreground" Value="DarkBlue"/></Trigger></Style.Triggers></Style></Button.Style>
</Button>

? 效果:鼠標懸停到按鈕上時,按鈕背景變綠、文字變藍。

相關屬性:

屬性 / 子元素類型說明
PropertyDependencyProperty觸發器監聽的屬性(比如 IsMouseOver
ValueobjectProperty 的值等于這個 Value 時觸發
Setters集合(Setter滿足條件后要應用的一組屬性修改(比如改顏色、改大小)
EnterActions集合(TriggerAction當進入觸發狀態時執行的動作(比如動畫)
ExitActions集合(TriggerAction當離開觸發狀態時執行的動作

常用條件:

屬性觸發器(PropertyTrigger)常用條件:

屬性名說明
IsMouseOver鼠標懸停在控件上時為 True
IsPressed按鈕等控件被按下時為 True
IsEnabled控件是否啟用(禁用時為 False
IsFocused控件是否獲得焦點(獲取為 True)
IsChecked復選框(CheckBox)、單選按鈕(RadioButton)是否選中
IsSelected列表項(ListBoxItem、TabItem等)是否被選中
Visibility控件是否可見(Visible / Hidden / Collapsed)
IsReadOnly文本框(TextBox)是否只讀
OrientationStackPanel等控件的方向(Horizontal / Vertical)


2. DataTrigger —— 數據變化觸發

當綁定的數據滿足某條件時,觸發樣式改變。

例子:如果按鈕綁定的某個值是 "危險",就變成紅色。

<Button Content="按鈕" Tag="危險"><Button.Style><Style TargetType="Button"><Style.Triggers><DataTrigger Binding="{Binding Tag, RelativeSource={RelativeSource Self}}" Value="危險"><Setter Property="Background" Value="Red"/></DataTrigger></Style.Triggers></Style></Button.Style>
</Button>

? Tag 屬性是 “危險” 時,按鈕背景變紅。

常用條件

DataTrigger 用于根據綁定到的數據(DataContext)變化觸發,比如:

綁定屬性說明
自定義屬性值比如某個 ViewModel 中的 Status == "完成"
布爾型標志比如 IsLoading == true
數值型、字符串型比較比如 Level > 5(需要結合 Converter 實現)


3. EventTrigger —— 事件發生時觸發動作(一般配合動畫)

例子:當按鈕加載完畢(Loaded 事件),讓按鈕慢慢變大:

<Button Content="加載放大按鈕"><Button.Triggers><EventTrigger RoutedEvent="Button.Loaded"><BeginStoryboard> <!--動畫--><Storyboard><DoubleAnimation Storyboard.TargetProperty="Width"From="100" To="200" Duration="0:0:2"/></Storyboard></BeginStoryboard></EventTrigger></Button.Triggers>
</Button>

? 效果:按鈕出現后,2秒內寬度從100變到200。

主要屬性

屬性 / 子元素類型說明
RoutedEventRoutedEvent 類型要監聽的事件(比如 Button.ClickEvent
SourceNamestring(可選)指定事件來源控件的名字(通常用于模板中)
Actions集合(TriggerAction事件觸發時要執行的動作,通常是開始動畫(BeginStoryboard
  1. RoutedEvent:必填!指定要監聽哪個路由事件。
<!--當按鈕被點擊時觸發。-->
<EventTrigger RoutedEvent="Button.Click">
  1. SourceName:(可選)指定事件來源控件的名字

    • 如果要監聽的事件是來自模板中另一個控件,需要指定它的 x:Name

    • 通常用在 ControlTemplateDataTemplate 內。

<!--監聽名為 `InnerBorder` 的元素的鼠標進入事件。-->
<EventTrigger RoutedEvent="MouseEnter" SourceName="InnerBorder">
  1. Actions:當事件發生時執行的動作。
    • BeginStoryboard:開始一個動畫
    • StopStoryboard:停止一個動畫
    • PauseStoryboard:暫停動畫
    • ResumeStoryboard:恢復動畫
<!--當事件觸發時,執行透明度變化動畫。-->
<BeginStoryboard><Storyboard><DoubleAnimation Storyboard.TargetProperty="Opacity" To="0.5" Duration="0:0:0.3"/></Storyboard>
</BeginStoryboard>


4. MultiTrigger —— 多屬性同時滿足觸發

例子:按鈕被禁用(IsEnabled = False)且鼠標懸停時,背景變灰:

<Button Content="多條件觸發按鈕" IsEnabled="False"><Button.Style><Style TargetType="Button"><Style.Triggers><MultiTrigger><MultiTrigger.Conditions><Condition Property="IsMouseOver" Value="True"/><Condition Property="IsEnabled" Value="False"/></MultiTrigger.Conditions><Setter Property="Background" Value="Gray"/></MultiTrigger></Style.Triggers></Style></Button.Style>
</Button>

? 效果:按鈕同時滿足兩種狀態,才改變樣式。

相關屬性

屬性/子元素類型說明
Conditions集合(Condition定義多個條件,必須全部同時滿足才觸發
Setters集合(Setter滿足條件后要改變的屬性
EnterActions(可選)集合(TriggerAction進入觸發狀態時執行的動作(如動畫)
ExitActions(可選)集合(TriggerAction離開觸發狀態時執行的動作
使用小技巧說明
盡量用 Style 包裹觸發器讓界面更整潔、好維護
配合 ControlTemplate自定義控件外觀時,觸發器更強大
Storyboard 讓觸發更有動效比如漸變色、放大縮小動畫

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82106.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82106.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82106.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

NLP核心技術解析:大模型與分詞工具的協同工作原理

文章目錄 一、核心關系概述二、分詞工具的核心作用三、未登錄詞&#xff08;OOV&#xff09;問題3.1 問題本質分析3.2 解決方案3.2.1 預對齊詞匯表&#xff08;最優解&#xff09;3.2.2 子詞回退策略3.2.3 詞匯表擴展&#xff08;適合專業領域&#xff09; 3.3 技術選型建議3.4…

vscode預覽模式(點擊文件時默認覆蓋當前標簽,標簽名稱顯示為斜體,可通過雙擊該標簽取消)覆蓋標簽、新窗打開

文章目錄 VS Code 預覽模式如何取消預覽模式&#xff08;即“固定”標簽頁&#xff09;&#xff1f;預覽模式有什么用&#xff1f; VS Code 預覽模式 在 VS Code 中&#xff0c;當你單擊文件瀏覽器&#xff08;例如&#xff0c;資源管理器側邊欄&#xff09;中的某個文件時&am…

MIT XV6 - 1.1 Lab: Xv6 and Unix utilities - user/_sleep 是什么?做什么?

接上文 MIT XV6 - 1.1 Lab: Xv6 and Unix utilities - sleep 是怎樣練成的&#xff1f; user/_sleep 是什么&#xff1f; book-riscv-rev3.pdf 3.8節有對Xv6 binary文件的格式描述 Xv6 binaries are formatted in the widely-used ELF format, defined in (kernel/elf.h). An …

【AI科技】AMD ROCm 6.4 新功能:突破性推理、即插即用容器和模塊化部署,可在 AMD Instinct GPU 上實現可擴展 AI

AMD ROCm 6.4 新功能&#xff1a;突破性推理、即插即用容器和模塊化部署&#xff0c;可在 AMD Instinct GPU 上實現可擴展 AI 現代 AI 工作負載的規模和復雜性不斷增長&#xff0c;而人們對性能和部署便捷性的期望也日益提升。對于在 AMD Instinct? GPU 上構建 AI 和 HPC 未來…

【含文檔+PPT+源碼】基于微信小程序連鎖藥店商城

項目介紹 本課程演示的是一款基于微信小程序連鎖藥店商城&#xff0c;主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習者。 1.包含&#xff1a;項目源碼、項目文檔、數據庫腳本、軟件工具等所有資料 2.帶你從零開始部署運行本套系統 3.該項目附帶的…

node.js模塊化步驟(各標準區別)CommonJS規范、AMD規范、UMD規范、ES Modules (ESM)

前后端建議統一使用ESM 文章目錄 Node.js模塊化發展歷程與標準對比一、模塊化的意義1.1 解決的核心問題1.2 沒有模塊化的問題 二、CommonJS規范2.1 核心特征2.2 實現示例 三、AMD (Asynchronous Module Definition)3.1 特點3.2 代碼示例 四、UMD (Universal Module Definition)…

人工智能與智能合約:如何用AI優化區塊鏈技術中的合約執行?

引言&#xff1a;科技融合的新風口 區塊鏈和人工智能&#xff0c;是當前最受矚目的兩大前沿技術。一個以去中心化、可溯源的機制重構信任體系&#xff0c;另一個以智能學習與決策能力重塑數據的價值。當這兩項技術相遇&#xff0c;會碰撞出什么樣的火花&#xff1f; 智能合約作…

RabbitMQ-api開發

前言 MQ就是接收并轉發消息 核心概念 admin是用戶 每個虛擬機上都有多個交換機 快速入門 引入依賴 <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.22.0</version></dependen…

PostgreSQL Patroni集群組件作用介紹:Patroni、etcd、HAProxy、Keepalived、Watchdog

1. Watchdog 簡介 1.1 核心作用 ? 主節點故障檢測 Watchdog 會定時檢測數據庫主節點&#xff08;或 Pgpool 主節點&#xff09;的運行狀態。 一旦主節點宕機&#xff0c;它會發起故障切換請求。 ? 協調主備切換 多個 Pgpool 節點時&#xff0c;Watchdog 保證只有一個 Pg…

【多種不同提交方式】通過springboot實現與前端網頁數據交互(非常簡潔快速)

【多種不同提交方式】通過springboot實現與前端網頁數據交互 提示&#xff1a;幫幫志會陸續更新非常多的IT技術知識&#xff0c;希望分享的內容對您有用。本章分享的是springboot的使用。前后每一小節的內容是存在的有&#xff1a;學習and理解的關聯性。【幫幫志系列文章】&am…

使用 AI 如何高效解析視頻內容?生成思維導圖或分時段概括總結

一、前言 AI 發展的如此迅速&#xff0c;有人想通過 AI 提效對視頻的解析&#xff0c;怎么做呢&#xff1f; 豆包里面有 AI 視頻總結的功能&#xff0c;可以解析bilibili網站上部分視頻&#xff0c;如下圖所示&#xff1a; 但有的視頻解析時提示&#xff1a; 所以呢&#x…

鞅與停時 - 一種特別的概率論問題

討論一個有趣的概率問題&#xff1a; [P3334 ZJOI2013] 拋硬幣 - 洛谷 實際上是一個猴子打字問題&#xff0c;考慮一直無規律隨即打字的猴子&#xff0c;鍵盤上只有A-Z一共26個字母&#xff0c;對于一個特定的字符串 S S S &#xff1a; ABCABCAB &#xff0c;能否在有限的打…

arcgis和ENVI中如何將數據輸出為tif

一、arcgis中轉換為tif 右鍵圖層&#xff1a; Data -> Export Data, 按照圖示進行選擇&#xff0c;選擇tiff格式導出即可&#xff0c;還可以選擇其他類型的格式&#xff0c;比如envi。 二、 ENVI中轉換為tif File -> Save As -> Save As (ENVI, NITF, TIFF, DTED) …

如何用命令行判斷一個exe是不是c#wpf開發的

在powershell下執行 $assembly [Reflection.Assembly]::ReflectionOnlyLoadFrom("你的exe全路徑") $references $assembly.GetReferencedAssemblies() echo $assembly $references | Where-Object { $_.Name -match "PresentationFramework|PresentationCore…

2025.05.07-華為機考第三題300分

?? 點擊直達筆試專欄 ??《大廠筆試突圍》 ?? 春秋招筆試突圍在線OJ ?? 筆試突圍OJ 03. 城市緊急救援隊伍協同規劃 問題描述 智慧城市建設中,盧小姐負責設計一套緊急救援隊伍協同系統。城市被規劃為一個 n n n \times n

深入理解Redis SDS:高性能字符串的終極設計指南

&#x1f4cd; 文章提示 10分鐘掌握Redis核心字符串設計 | 從底層結構到源碼實現&#xff0c;揭秘SDS如何解決C字符串七大缺陷&#xff0c;通過20手繪圖示與可運行的C代碼案例&#xff0c;助你徹底理解二進制安全、自動擴容等核心機制&#xff0c;文末附實戰優化技巧&#xff…

jupyter notebook漢化教程

本章教程記錄&#xff0c;jupyter notebook漢化步驟&#xff0c;如果對漢化有需求的小伙伴可以看看。 一、安裝jupyter 如果你是安裝的anaconda的那么默認是包含了Jupyter notebook的&#xff0c;如果是miniconda或者基礎python&#xff0c;默認是不包含的jupyter組件的&#x…

模擬設計中如何減小失配

Xx 芯片測試結果顯示&#xff0c;offset 指標偏高&#xff0c;不符合指標要求。所以查看了資料&#xff0c;溫習了減小的失配的方法。 注意點一&#xff1a; 將所有offet折算到輸入端&#xff0c;得到以下公式&#xff1a; 可以看到a&#xff09;閾值電壓失配直接折算成輸…

C++ 與 Lua 聯合編程

在軟件開發的廣闊天地里&#xff0c;不同編程語言各有所長。C 以其卓越的性能、強大的功能和對硬件的直接操控能力&#xff0c;在系統開發、游戲引擎、服務器等底層領域占據重要地位&#xff0c;但c編寫的程序需要編譯&#xff0c;這往往是一個耗時操作&#xff0c;特別對于大型…

烤箱面包烘焙狀態圖詳解:從UML設計到PlantUML實現

題目&#xff1a;假設你正著手設計一個烤箱。建立一個跟蹤烤箱中面包狀態的狀態圖。要包括必要的觸發器事件、動作和監視條件。 一、狀態圖概述 狀態圖是UML&#xff08;統一建模語言&#xff09;中的一種行為圖&#xff0c;它用于描述系統中對象的狀態變化以及觸發這些變化的…