WPF之依賴屬性的繼承

2022-03-21 08:52:54 字數 2978 閱讀 7053

為依賴屬性增加屬性值繼承的特性

通常我們會給某乙個控制項(元素)新增依賴屬性,如果希望這個依賴屬性的改變可以影響到當前窗體中所有擁有此屬性的元素,那麼就需要屬性值得繼承特性;

思路如下:

有如下自定義按鈕類:

public

class

spacebutton : button

get }

//依賴屬性

public

static

readonly

dependencyproperty spaceproperty;

//.net屬性包裝器

public

intspace

get }

//靜態的建構函式

static

spacebutton()

//值驗證的**函式

static

bool validatespacevalue(object

obj)

//屬性值改變的**函式

static

void

onspacepropertychanged(dependencyobject obj, dependencypropertychangedeventargs args)

//該方法給字串間距加上空格

string spaceouttext(string

str)

}

可以看到**中有乙個space的自定義依賴屬性,用於控制文字之間的間距,當前情況下是沒有進行屬性繼承的方式,此時使用方式如下:

<

local:spacebutton

x:name

="btnspace"

grid.column

="0"

grid.row

="0"

margin

="5"

click

="btnspace_click"

text

="設定按鈕字元空格:2"

>

private

void btnspace_click(object

sender, routedeventargs e)

看起來沒什麼不一樣,就是一般的依賴屬性的使用,接下來開始修改**,使**可以達到值繼承的效果。

首先,在窗體中新增space屬性

static

mainwindow()

public

static

readonly

dependencyproperty spaceproperty;

public

intspace

get }

可以看到,**和spacebutton中有些差別,這裡的依賴屬性space不是註冊而來,而是從spacebutton的space屬性的addowner方法而來。即依賴屬性可以選擇把自身新增給其他屬性,這是普通屬性無法實現的。另外注意一點,要設定元資料(fraeworkpropertymetadata)的inherits屬性為true,才可以實現屬性值繼承,同時也要修改spacebutton中元資料的inhertis屬性也為true。

xaml使用方法如下:

<

window

x:class

="mumu_button02.mainwindow"

xmlns

=""xmlns:x

=""xmlns:local

="clr-namespace:mumu_button02"

title

="mumu_button02"

width

="300"

height

="300"

>

<

grid

>

<

grid.rowdefinitions

>

<

rowdefinition

/>

<

rowdefinition

/>

grid.rowdefinitions

>

<

local:spacebutton

x:name

="btnspace"

grid.column

="0"

grid.row

="0"

margin

="5"

click

="btnspace_click"

text

="設定按鈕字元空格:2"

>

local:spacebutton

>

<

local:spacebutton

x:name

= "winspace"

grid.column

="0"

grid.row

="1"

margin

="5"

click

="winspace_click"

text

="設定視窗字元空格:2"

>

local:spacebutton

>

grid

>

window

>

窗體中有兩個按鈕,分別控制當前按鈕和窗體的字元之間的空格;

private void btnspace_click(object sender, routedeventargs e)

private void winspace_click(object sender, routedeventargs e)

這時候當按下 」設定窗體字元空格「的按鈕,則會修改兩個按鈕的字元空格,而另乙個按鈕則只能控制自己的字元空格。

WPF之依賴屬性

依賴屬性 什麼時候需要定義依賴屬性 1 如果希望屬性可以在style中設定 2 如果希望屬性可以資料繫結 3 如果希望屬性可以由動態資源 dynamicresource 設定 4 如果希望從父元素那裡獲得值 5 如果希望屬性可以設定動畫 6 如果希望屬性在被修改時能夠檢測值得有效性,修改後 7 如果...

WPF 依賴屬性

原文 wpf 依賴屬性 屬性和事件是.net抽象模型的核心部分,wpf在這之上增加了dependency property 依賴屬性 依賴屬性使用更高效的儲存機制,並且支援附加的功能,更改通知 屬性值繼承 在元素樹中向下傳播預設屬性值 以及減少屬性儲存空間。依賴屬性是wpf動畫 資料繫結和樣式的基礎...

WPF依賴屬性

依賴屬性是一種可以自己沒有值,並能通過使用binding從資料來源獲取值 依賴在別人身上 的屬性。優點 wpf的所有控制項都是依賴屬性。依賴物件被dependencyobject類實現,依賴屬性由dependencyproperty類實現。dependencyobject有getvalue setv...