日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

初步了解WPF依赖属性

發布時間:2025/4/14 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 初步了解WPF依赖属性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一 依賴屬性

? ? 在WPF庫實現中,依賴屬性使用普通的C#屬性進行了包裝,使得我們可以通過和以前一樣的方式來使用依賴屬性。但必須明確,在WPF中我們大多數都在使用依賴屬性,而不是使用屬性。依賴屬性重要性在于,在WPF核心特性,如動畫、數據綁定以及樣式中都需要使用到依賴屬性。WPF中的依賴屬性主要有以下三個優點:
? ? 依賴屬性加入了屬性變化通知、限制、驗證等功能。這樣可以使我們更方便地實現應用,同時大大減少了代碼量。許多之前需要寫很多代碼才能實現的功能,在WPF中可以輕松實現。
? ? 節約內存:在WinForm中,每個UI控件的屬性都賦予了初始值,這樣每個相同的控件在內存中都會保存一份初始值。而WPF依賴屬性很好地解決了這個問題,它內部實現使用哈希表存儲機制,對多個相同控件的相同屬性的值都只保存一份。
? ? 支持多種提供對象:可以通過多種方式來設置依賴屬性的值。可以配合表達式、樣式和綁定來對依賴屬性設置值。

二 如何自己定義一個依賴屬性

? ? 在C#屬性定義的基礎上;
? ? 讓依賴屬性的所在類型繼承自DependencyObject類;
? ? 使用public static 聲明一個DependencyProperty的變量,該變量就是真正的依賴屬性;
? ? 在類型的靜態構造函數中通過Register方法完成依賴屬性的元數據注冊;
? ? 提供一個依賴屬性的包裝屬性,通過這個屬性來完成對依賴屬性的讀寫操作;

? ? 依賴屬性是通過調用DependencyObject的GetValue和SetValue來對依賴屬性進行讀寫的。它使用哈希表來進行存儲的,對應的Key就是屬性的HashCode值,而值(Value)則是注冊的DependencyPropery;而C#中的屬性是類私有字段的封裝,可以通過對該字段進行操作來對屬性進行讀寫。總結為:屬性是字段的包裝,WPF中使用屬性對依賴屬性進行包裝。


三 依賴屬性優先級


? ? 按從高到低排序:

1 屬性系統強制轉換。強制轉換和動畫在本 SDK 中都作用于稱為“基值”的值。便于動畫不受別的設置影響。
2 活動動畫或具有 Hold 行為的動畫。為了獲得任何實用效果,屬性的動畫必須優先于基(未動畫)值,即使該值是在本地設置的情況下也將如此。
3 本地值。本地值可以通過“包裝”屬性 (Property) 的便利性進行設置,這也相當于在 XAML 中設置 Attribute 或 Property 元素,或者使用特定實例的屬性調用 SetValue API。如果您使用綁定或資源來設置本地值,則每個值都按照直接設置值的優先級順序來應用。
4 TemplatedParent 模板屬性。如果元素是作為模板(ControlTemplate 或 DataTemplate)的一部分創建的,則具有 TemplatedParent。在模板中,按以下優先級順序應用:
? ? 1 來自 TemplatedParent 模板的觸發器。
? ? 2 TemplatedParent 模板中的屬性 (Property) 集。(通常通過 XAML 屬性 (Attribute) 進行設置。)
5 隱式樣式。僅應用于Style屬性。Style屬性是由任何樣式資源通過與其類型匹配的鍵來填充的。該樣式資源必須存在于頁面或應用程序中;查找隱式樣式資源不會進入到主題中。
6 樣式觸發器。來自頁面或應用程序上的樣式中的觸發器。(這些樣式可以是顯式或隱式樣式,但不是來自優先級較低的默認樣式。)
7 模板觸發器。來自樣式中的模板或者直接應用的模板的任何觸發器。
8 樣式 Setter。來自頁面或應用程序的樣式中的 Setter 的值。
9 默認(主題)樣式。在默認樣式中,按以下優先級順序應用:
? ? 1 主題樣式中的活動觸發器。
? ? 2 主題樣式中的 Setter。
10 繼承。有幾個依賴項屬性從父元素向子元素繼承值,因此不需要在應用程序中的每個元素上專門設置這些屬性。
11 來自依賴項屬性元數據的默認值。任何給定的依賴項屬性都具有一個默認值,它由該特定屬性的屬性系統注冊來確定。而且,繼承依賴項屬性的派生類具有按照類型重寫該元數據(包括默認值)的選項。因為繼承是在默認值之前檢查的,所以對于繼承的屬性,父元素的默認值優先于子元素。因此,如果任何地方都沒有設置可繼承的屬性,將使用在根元素或父元素中指定的默認值,而不是子元素的默認值。

四 一個簡單實例

<Pagexmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"><Grid> <Button x:Name="myButton" Background="Green" Width="400" Height="300"><Button.Style><Style TargetType="{x:Type Button}"><Setter Property="Background" Value="Yellow"/><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="Background" Value="Red" /></Trigger></Style.Triggers></Style></Button.Style>Click Me </Button></Grid> </Page>

? ? 代碼在三個地方設置了按鈕的顏色;按鈕最終為綠色;
?

總結

以上是生活随笔為你收集整理的初步了解WPF依赖属性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。