wpf CommandParameter 傳遞MouseWheelEventArgs參數

在 WPF 中通過?CommandParameter?傳遞?MouseWheelEventArgs?參數時,需結合 ?事件到命令的轉換機制? 和 ?參數轉換器? 來實現。以下是具體實現方案及注意事項:

一、核心實現方法

1. ?使用?EventToCommand?傳遞原始事件參數?

通過?Interaction.Triggers?捕獲鼠標滾輪事件,并利用?PassEventArgsToCommand?屬性直接傳遞參數:

<i:Interaction.Triggers><i:EventTrigger EventName="MouseWheel"><i:InvokeCommandAction Command="{Binding MouseWheelCommand}"PassEventArgsToCommand="True"/></i:EventTrigger>
</i:Interaction.Triggers>

視圖模型中的命令接收?MouseWheelEventArgs?類型參數:

public ICommand MouseWheelCommand => new RelayCommand<MouseWheelEventArgs>(e =>
{int delta = e.Delta; // Delta>0 向上滾動,Delta<0 向下滾動
});

此方法依賴?Microsoft.Xaml.Behaviors.Wpf?庫。


2. ?通過轉換器提取關鍵參數?

若需傳遞特定值(如滾動方向),可自定義?IEventArgsConverter

public class MouseWheelDirectionConverter : IEventArgsConverter
{public object Convert(object value, object parameter, CultureInfo culture){var args = (MouseWheelEventArgs)value;return args.Delta > 0 ? WheelDirection.Up : WheelDirection.Down;}
}

XAML 中綁定轉換器:

<i:EventTrigger EventName="MouseWheel"><i:InvokeCommandAction Command="{Binding MouseWheelCommand}"EventArgsConverter="{StaticResource MouseWheelConverter}"/>
</i:EventTrigger>

視圖模型命令接收?WheelDirection?枚舉類型參數35。


3. ?自定義?MouseWheelGesture?實現方向識別?

定義繼承自?MouseGesture?的類,通過?Matches?方法判斷滾動方向:

public class MouseWheelGesture : MouseGesture
{public WheelDirection Direction { get; set; }public override bool Matches(object targetElement, InputEventArgs args){if (!(args is MouseWheelEventArgs wheelArgs)) return false;return Direction == (wheelArgs.Delta > 0 ? WheelDirection.Up : WheelDirection.Down);}
}

在 XAML 中綁定命令時直接指定方向:

<Window.InputBindings><KeyBinding Gesture="{x:Static local:MouseWheelGesture.Up}" Command="{Binding ScrollUpCommand}"/><KeyBinding Gesture="{x:Static local:MouseWheelGesture.Down}" Command="{Binding ScrollDownCommand}"/>
</Window.InputBindings>

此方法適用于需要區分上下滾動的場景5。


二、注意事項

  1. ?命名空間引用?
    需添加?System.Windows.Interactivity?或?Microsoft.Xaml.Behaviors?命名空間以使用交互行為。

  2. ?參數類型匹配?
    確保命令參數類型與傳遞的數據類型一致(如?MouseWheelEventArgs?或轉換后的?WheelDirection)。

  3. ?跨線程訪問?
    若在命令中更新 UI 元素,需通過?Dispatcher?切換線程。


三、擴展場景

  • ?多參數傳遞?:將?DeltaSource?等屬性封裝到自定義對象中傳遞。
  • ?附加屬性動態綁定?:通過附加屬性動態關聯事件與命令,提升代碼復用性。

通過上述方法,可在 MVVM 模式下高效處理鼠標滾輪事件參數,同時保持視圖與邏輯層的解耦。

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

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

相關文章

八大排序之選擇排序

本篇文章將帶你詳細了解八大基本排序中的選擇排序 目錄 &#xff08;一&#xff09;選擇排序的時間復雜度和空間復雜度及穩定性分析 &#xff08;二&#xff09;代碼實現 (三)輸出結果 選擇排序的基本原理是&#xff1a;每次從待排序的數組中找出最大值和最小值。具體流程是…

【算法學習】哈希表篇:哈希表的使用場景和使用方法

算法學習&#xff1a; https://blog.csdn.net/2301_80220607/category_12922080.html?spm1001.2014.3001.5482 前言&#xff1a; 在之前學習數據結構時我們就學習了哈希表的使用方法&#xff0c;這里我們主要是針對哈希表的做題方法進行講解&#xff0c;都是leetcode上的經典…

Java 中如何實現自定義類加載器,應用場景是什么?

在 Java 中&#xff0c;可以通過繼承 java.lang.ClassLoader 類來實現自定義類加載器。自定義類加載器可以控制類的加載方式&#xff0c;實現一些特殊的應用場景。 實現自定義類加載器的步驟&#xff1a; 繼承 java.lang.ClassLoader 類。 重寫 findClass(String name) 方法 …

信創開發中跨平臺開發框架的選擇與實踐指南

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家、CSDN平臺優質創作者&#xff0c;高級開發工程師&#xff0c;數學專業&#xff0c;10年以上C/C, C#, Java等多種編程語言開發經驗&#xff0c;擁有高級工程師證書&#xff1b;擅長C/C、C#等開發語言&#xff0c;熟悉Java常用開…

WebRTC 服務器之Janus架構分析

1. Webrtc三種類型通信架構 1.1 1 對 1 通信 1 對 1 通信模型設計的主要?標是盡量讓兩個終端進?直聯&#xff0c;這樣即可以節省服務器的資源&#xff0c;?可以提? ?視頻的服務質量。WebRTC ?先嘗試兩個終端之間是否可以通過 P2P 直接進?通信&#xff0c;如果?法直接…

數字化轉型進階:26頁華為數字化轉型實踐分享【附全文閱讀】

本文分享了華為數字化轉型的實踐經驗和體會。華為通過數字化變革,致力于在客戶服務、供應鏈、產品管理等方面提高效率,并把數字世界帶入每個組織,構建萬物互聯的智能世界。華為的數字化轉型愿景是成為行業標桿,通過推進數字化戰略、構建面向業務數字化轉型的IT組織陣型、堅…

Hal庫下備份寄存器

首先要確保有外部電源給VBAT供電 生成后應該會有這兩個文件&#xff08;不知道為什么生成了好幾次都沒有&#xff0c;復制工程在試一次就有了&#xff09; 可以看到stm32f407有20個備份寄存器 讀寫函數 void HAL_RTCEx_BKUPWrite(RTC_HandleTypeDef *hrtc, uint32_t Backup…

使用 Vue3 + Webpack 和 Vue3 + Vite 實現微前端架構(基于 Qiankun)

在現代前端開發中&#xff0c;微前端架構逐漸成為一種流行的解決方案&#xff0c;尤其是在大型項目中。通過微前端&#xff0c;我們可以將一個復雜的單體應用拆分為多個獨立的小型應用&#xff0c;每個子應用可以獨立開發、部署和運行&#xff0c;同時共享主應用的基礎設施。本…

【c++】【STL】list詳解

目錄 list的作用list的接口構造函數賦值運算符重載迭代器相關sizeemptyfrontbackassignpush_frontpop_frontpush_backpop_backinserteraseswapresizeclearspliceremoveremove_ifuniquemergesortreverse關系運算符重載&#xff08;非成員函數&#xff09; list的模擬實現結點類迭…

Redis持久化:

什么是Redis持久化&#xff1a; Redis 持久化是指將 Redis 內存中的數據保存到硬盤等持久化存儲介質中&#xff0c;以便在 Redis 服務器重啟或出現故障時能夠恢復數據&#xff0c;保證數據的可靠性和持續性。Redis 提供了兩種主要的持久化方式&#xff1a;RDB&#xff08;Redi…

VBA 64位API聲明語句第009講

跟我學VBA&#xff0c;我這里專注VBA, 授人以漁。我98年開始&#xff0c;從源碼接觸VBA已經20余年了&#xff0c;隨著年齡的增長&#xff0c;越來越覺得有必要把這項技能傳遞給需要這項技術的職場人員。希望職場和數據打交道的朋友&#xff0c;都來學習VBA,利用VBA,起碼可以提高…

在pycharm profession 2020.3將.py程序使用pyinstaller打包成exe

一、安裝pyinstaller 在pycharm的項目的Terminal中運行pip3 install pyinstaller即可。 安裝后在Terminal中輸入pip3 list看一下是否成功 二、務必在在項目的Terminal中輸入命令打包&#xff0c;命令如下&#xff1a; python3 -m PyInstaller --noconsole --onefile xxx.py …

Unity SpriteRenderer(精靈渲染器)

&#x1f3c6; 個人愚見&#xff0c;沒事寫寫筆記 &#x1f3c6;《博客內容》&#xff1a;Unity3D開發內容 &#x1f3c6;&#x1f389;歡迎 &#x1f44d;點贊?評論?收藏 &#x1f50e;SpriteRenderer:精靈渲染器 &#x1f4a1;Sprite Renderer是精靈渲染器&#xff0c;所有…

2.LED燈的控制和按鍵檢測

目錄 STM32F103的GPIO口 GPIO口的作用 GPIO口的工作模式 input輸入檢測 -- 向內檢測 output控制輸出 -- 向外輸出 寄存器 寄存器地址的確定 配置GPIO口的工作模式 時鐘的開啟和關閉 軟件編程驅動 LED 燈 硬件 軟件 軟件編程驅動 KEY 按鍵 硬件 軟件 按鍵消抖 代碼 STM32F…

Flink 的狀態機制

在實時流處理領域&#xff0c;狀態管理是構建復雜業務邏輯的核心能力。Apache Flink 通過統一的狀態抽象和高效的容錯機制&#xff0c;為開發者提供了從毫秒級窗口聚合到 TB 級歷史數據關聯的全場景支持。本文將深入剖析 Flink 狀態機制的底層原理&#xff0c;結合實際案例展示…

【查看.ipynp 文件】

目錄 如何打開 .ipynb 文件&#xff1f; 如果確實是 .ipynp 文件&#xff1a; .ipynp 并不是常見的 Jupyter Notebook 文件格式。通常&#xff0c;Jupyter Notebook 文件的擴展名是 .ipynb&#xff08;即 Interactive Python Notebook&#xff09;。如果你遇到的是 .ipynb 文…

Runnable組件重試機制降低程序錯誤率

一、LangChain 重試機制深度解析 當構建生產級AI應用時&#xff0c;with_retry() 機制可有效提升系統容錯性&#xff0c;典型應用場景包括&#xff1a; API調用頻率限制時的自動恢復模型服務臨時不可用的故障轉移網絡波動導致的瞬時異常處理 參數詳解與配置策略 1. 參數配置…

k8s筆記——kubebuilder工作流程

kubebuilder工作流程 Kubebuilder 工作流程詳解 Kubebuilder 是 Kubernetes 官方推薦的 Operator 開發框架&#xff0c;用于構建基于 Custom Resource Definitions (CRD) 的控制器。以下是其核心工作流程的完整說明&#xff1a; 1. 初始化項目 # 創建項目目錄 mkdir my-opera…

Java框架“若依RuoYi”前后端分離部署

運行環境 Eclipse IDE for Enterprise Java and Web Developers 下載Eclipse解壓Eclipse到文件夾 Maven 下載Maven解壓Maven到文件夾配置環境變量MAVEN_HOME為Maven安裝位置配置環境變量path為%MAVEN_HOME%\bin Redis 下載Redis解壓Redis到文件夾配置環境變量path為Redis安裝位…

游戲引擎學習第249天:清理調試宏

歡迎大家&#xff0c;讓我們直接進入調試代碼的改進工作 接下來&#xff0c;我們來看一下上次停留的位置。如果我沒記錯的話&#xff0c;上一場直播的結尾我有提到一些我想做的事情&#xff0c;并且在代碼中留下了一個待辦事項。所以也許我們今天首先做的就是解決這個問題。但…