WPF定義擴展屬性和依賴屬性

WPF擴展屬性與依賴屬性詳解

一、依賴屬性(Dependency Property)詳解

1. 什么是依賴屬性?

依賴屬性是WPF框架的核心特性之一,它允許屬性值依賴于:

  • 父元素的屬性值(繼承)
  • 樣式和模板
  • 動畫
  • 數據綁定
  • 資源查找

2. 依賴屬性的特點

  1. ??屬性值繼承??:子元素可以繼承父元素的屬性值
  2. ??屬性值變更通知??:自動通知UI更新
  3. ??屬性值存儲優化??:只在值改變時存儲實際值
  4. ??支持動畫和樣式??:可直接用于動畫和樣式設置
  5. ??值強制轉換??:可通過驗證和強制轉換器控制值

3. 定義依賴屬性的標準模式

 
using System.Windows;
using System.Windows.Controls;public class CustomControl : Control
{// 1. 定義依賴屬性標識符public static readonly DependencyProperty MyPropertyProperty =DependencyProperty.Register(nameof(MyProperty),                // 屬性名稱typeof(string),                    // 屬性類型typeof(CustomControl),             // 所屬類型new PropertyMetadata("默認值"));   // 屬性元數據// 2. 定義CLR包裝屬性public string MyProperty{get => (string)GetValue(MyPropertyProperty);set => SetValue(MyPropertyProperty, value);}
}

4. 依賴屬性元數據選項

 
new PropertyMetadata(defaultValue: "默認值",                     // 默認值propertyChangedCallback: OnMyPropertyChanged, // 值改變回調coerceValueCallback: CoerceMyProperty,      // 值強制回調isAnimationProhibited: false                // 是否禁止動畫
);// 值改變回調示例
private static void OnMyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{var control = (CustomControl)d;// 處理屬性變化邏輯
}// 值強制回調示例
private static object CoerceMyProperty(DependencyObject d, object baseValue)
{var control = (CustomControl)d;if (baseValue is string str && str.Length > 10){return str.Substring(0, 10); // 限制最大長度為10}return baseValue;
}

5. 附加屬性(Attached Property)

 
public class GridHelper
{// 定義附加屬性public static readonly DependencyProperty ColumnProperty =DependencyProperty.RegisterAttached("Column",                          // 屬性名稱typeof(int),                       // 屬性類型typeof(GridHelper),                // 所屬類型new PropertyMetadata(0));          // 默認值// CLR包裝器 - 獲取方法public static int GetColumn(DependencyObject obj){return (int)obj.GetValue(ColumnProperty);}// CLR包裝器 - 設置方法public static void SetColumn(DependencyObject obj, int value){obj.SetValue(ColumnProperty, value);}
}

XAML中使用:

 
<Grid><Button GridHelper.Column="1" Content="附加屬性示例"/>
</Grid>

二、擴展屬性(Attached Property)詳解

1. 什么是擴展屬性?

擴展屬性(Attached Property)是一種特殊的依賴屬性,它:

  • 可以附加到任何DependencyObject上
  • 由非所有者類型定義
  • 通常用于提供附加功能

2. 擴展屬性的應用場景

  1. ??布局控制??:如Grid.Row、Canvas.Left等
  2. ??行為附加??:為現有控件添加新功能
  3. ??樣式定制??:在不修改原有控件的情況下添加新屬性

3. 擴展屬性實現示例

示例1:簡單擴展屬性
 
public class DragDropHelper
{// 定義擴展屬性

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

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

相關文章

邊緣函數:全棧開發的最后1毫秒性能革命

一、邊緣計算的時空折疊術 1. 傳統CDN vs. 智能邊緣網絡 全球電商平臺實測數據&#xff1a; 場景云端處理延遲邊緣處理延遲轉化率提升搜索建議320ms8ms18%個性化推薦450ms12ms27%實時庫存檢查680ms9ms42%欺詐檢測920ms15ms63% 二、邊緣全棧架構的量子糾纏 1. 代碼的時空分布…

Codeforces Round 1021 (Div. 2) D. Baggage Claim(建圖)

每周五篇博客&#xff1a;&#xff08;4/5&#xff09; https://codeforces.com/contest/2098/problem/D 題意 每個機場都有一個行李索賠區&#xff0c;巴爾貝索沃機場也不例外。在某個時候&#xff0c;Sheremetyevo的一位管理員提出了一個不尋常的想法&#xff1a;將行李索…

LLM(大語言模型)技術的最新進展可總結

截至2025年4月26日&#xff0c;LLM&#xff08;大語言模型&#xff09;技術的最新進展可總結為以下關鍵方向&#xff1a; 1. 架構創新與性能突破 多模態能力深化&#xff1a;GPT-4o等模型通過統一架構支持文本、圖像、音頻和視頻的跨模態推理&#xff0c;顯著提升復雜場景下的…

黑馬點評redis改 part 6

GEO數據結構 GEO就是Geolocation的簡寫形式&#xff0c;代表地理坐標。Redis在3.2版本中加入了對GEO的支持&#xff0c;允許存儲地理坐標信息&#xff0c;幫助我們根據經緯度來檢索數據。常見的命令有&#xff1a; GEOADD&#xff1a;添加一個地理空間信息&#xff0c;包含&a…

Spring_MVC 中的 JSON 數據處理與 REST 風格開發

Spring_MVC 中的 JSON 數據處理與 REST 風格開發 一、JSON 格式參數 1. 格式布置 依賴導入 為了處理 JSON 數據&#xff0c;需要在項目中引入 Jackson 庫&#xff0c;它是 Spring_MVC 默認使用的 JSON 處理工具。 <dependency><groupId>com.fasterxml.jackson…

藍橋杯 8. 移動距離

移動距離 原題目鏈接 題目描述 X 星球居民小區的樓房全是一樣的&#xff0c;并且按矩陣樣式排列。樓房的編號為 1, 2, 3, ??。 當排滿一行時&#xff0c;從下一行相鄰的樓往反方向排號。 例如&#xff0c;當小區排號寬度為 6 時&#xff0c;排列如下&#xff1a; 1 2 …

第11章 安全網絡架構和組件(一)

11.1 OSI 模型 協議可通過網絡在計算機之間進行通信。 協議是一組規則和限制&#xff0c;用于定義數據如何通過網絡介質&#xff08;如雙絞線、無線傳輸等&#xff09;進行傳輸。 國際標準化組織(ISO)在20世紀70年代晚期開發了開放系統互連(OSI)參考模型。 11.1.1 OSI模型的…

文獻分享:一種四價雙特異性抗體的功能性和IgG樣穩定性、藥理學和可開發特性研究

背景 雙特異性抗體&#xff08;bsAb&#xff09;是一種有前途的藥物形式&#xff0c;能夠同時結合相同或不同抗原上的兩個不同表位。迄今為止&#xff0c;已有14個雙特異性抗體藥物獲得上市批準&#xff0c;盡管取得了這些成功并且迄今為止設計了多種形式&#xff0c;但具有高…

英文中數字讀法規則

以下是英文中數字讀法的詳細規則&#xff0c;涵蓋基本數字、大數字、小數、分數、序數詞及特殊場景&#xff08;如電話號碼、年份、金額等&#xff09;&#xff1a; 一、基本數字&#xff08;0-10&#xff09; 數字基數詞&#xff08;Cardinal&#xff09;序數詞&#xff08;O…

32BIT的SPI主機控制

SPI傳輸位數可參數化配置。 SPI_MASTER: timescale 1ns / 1ps module SPI_Master #(parameter CLK_FREQ 50,parameter SPI_CLK 1000,parameter CPOL 0,parameter CPHA 0 )(input clk,input rst_n,input WrRdReq, //讀/寫數據請求output …

vue響應式原理——vue2和vue3的響應式實現區別

Vue的核心功能點之一是響應式&#xff1a;Vue 會自動跟蹤 JavaScript 狀態并在其發生變化時響應式地更新 DOM。 簡單的來說就是&#xff0c;頁面的渲染效果會隨著數據變化而變化&#xff0c;不用我們去手動操作DOM樹進行數據變化后的渲染。為了實現這一目的&#xff0c;我們最簡…

Kaamel白皮書:2025版COPPA落地實操指南

COPPA簡介 《兒童在線隱私保護法案》&#xff08;COPPA&#xff09;于1998年在美國頒布&#xff0c;其最初的動因源于人們日益增長的對互聯網上收集兒童個人信息的擔憂。為了響應這一問題&#xff0c;聯邦貿易委員會&#xff08;FTC&#xff09;被授權制定并執行相關法規。COP…

測試基礎筆記第十四天

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、字符串1.字符串2.字符串切片3.查找find&#xff08;&#xff09;4.去除兩端空白字符 strip5.字符串轉換大小寫 lower、upper5.拆分 split()6.字符串的其他常見方…

什么是Lua模塊?你會如何使用NGINX的Lua模塊來定制請求處理流程?

大家好&#xff0c;我是鋒哥。今天分享關于【什么是Lua模塊&#xff1f;你會如何使用NGINX的Lua模塊來定制請求處理流程&#xff1f;】面試題。希望對大家有幫助&#xff1b; 什么是Lua模塊&#xff1f;你會如何使用NGINX的Lua模塊來定制請求處理流程&#xff1f; 1000道 互聯…

ubuntu擴展邏輯卷并調整文件系統大小步驟

安裝好ubuntu如果沒有調整磁盤空間,一般默認給你100G的空間,在用完時再調整也還來得及,下面是 ubuntu擴展邏輯卷并調整文件系統大小步驟&#xff1a; 1. 擴展邏輯卷 運行以下命令來擴展邏輯卷 /dev/ubuntu-vg/ubuntu-lv&#xff0c;使其使用卷組中所有未分配的空間&#xff…

復雜背景下無人機影像小目標檢測:MPE-YOLO抗遮擋與抗背景干擾設計

目錄 一、引言 二、挑戰和貢獻 密集小目標和遮擋 實時性要求與精度權衡 復雜背景 三、MPE-YOLO模型細節 多級特征集成器&#xff08;MFI&#xff09; 感知增強卷積&#xff08;PEC&#xff09; 增強范圍C2f模塊&#xff08;ES-C2f&#xff09; 四、Coovally AI模型訓…

【C++】13.list的模擬實現

首先&#xff0c;我們需要把鏈表管理起來&#xff0c;也就是把一個個節點管理起來&#xff0c;但是每個節點的信息我們也需要管理&#xff0c;例如節點的前驅指針和后驅指針&#xff0c;以及節點的值&#xff0c;所以我們這里先封裝兩個類來管理節點和鏈表。 namespace Ro {te…

TinyVue v3.22.0 正式發布:深色模式上線!集成 UnoCSS 圖標庫!TypeScript 類型支持全面升級!

我們非常高興地宣布&#xff0c;2025年4月7日&#xff0c;TinyVue發布了v3.22.0&#x1f389;。 本次 3.22.0 版本主要有以下重大變更&#xff1a; 支持深色模式增加基于 UnoCSS 的圖標庫更豐富的 TypeScript 類型聲明支持 XSS 配置 詳細的 Release Notes 請參考&#xff1a…

超級創新思路:基于CBAM-Transformer的強化學習時間序列預測模型(Python\matlab實現)

首先聲明,該模型為原創!原創!原創!且該思路還未有成果發表,感興趣的小伙伴可以借鑒!需要完整代碼可私信或評論! 本方案可用于醫療、金融、交通、零售、光伏功率預測、估計預測、天氣預測、流量預測、故障檢測等領域! 目錄 首先聲明,該模型為原創!原創!原創!且該思…

Apache Sqoop數據采集問題

Sqoop數據采集格式問題 一、Sqoop工作原理二、Sqoop命令格式三、Oracle數據采集格式問題四、Sqoop增量采集方案 Apache Sqoop是一款開源的工具&#xff0c;主要用于在Hadoop(Hive)與傳統的數據庫(mysql、postgresql…)間進行數據的傳遞&#xff0c;可以將一個關系型數據庫&…