WPF Adorner 附加屬性 實現控制項友好提示

2021-09-19 21:41:30 字數 2560 閱讀 1493

原文:

wpf adorner+附加屬性 實現控制項友好提示

標題太空泛,直接上圖

無論是在驗證啊,還是提示方面等一些右上角的角標之類的效果,我們會怎麼做?

這裡介紹一種稍微簡單一些的方法,利用附加屬性和adorner來完成。

例如wpf自帶的控制項上要加這樣的效果,首先繼承自原控制項然後重寫是可以的,但是控制項型別太多,重寫不過來。這個時候我們唯一能新增的只有附加屬性了。

利用附加屬性的屬性變更事件propertychangedcallback,我們可以獲取到宿主物件即button,然後就可以往button上加入我們自定義的adorner了。再新增乙個附加屬性控制adorner的顯示/隱藏,那麼就很完美了,這樣每個控制項只用設定兩個附加屬性就能擁有上面的效果。下面是核心**,

附加屬性

public

class

adornerhelper

public

static

void sethasadorner(dependencyobject obj, bool

value)

//using a dependencyproperty as the backing store for hasadorner. this enables animation, styling, binding, etc...

public

static

readonly dependencyproperty hasadornerproperty =dependencyproperty.registerattached(

"hasadorner

", typeof(bool), typeof(adornerhelper), new propertymetadata(false

, propertychangedcallback));

private

static

void

propertychangedcallback(dependencyobject d, dependencypropertychangedeventargs e)}}

} #endregion

#region 是否顯示adorner

public

static

bool

getisshowadorner(dependencyobject obj)

public

static

void setisshowadorner(dependencyobject obj, bool

value)

//using a dependencyproperty as the backing store for isshowadorner. this enables animation, styling, binding, etc...

public

static

readonly dependencyproperty isshowadornerproperty =dependencyproperty.registerattached(

"isshowadorner

", typeof(bool), typeof(adornerhelper), new propertymetadata(false

,isshowchangedcallback));

private

static

void

isshowchangedcallback(dependencyobject d, dependencypropertychangedeventargs e)

if ((bool

)e.newvalue)

else} }

}}#endregion

}

然後是我們自定義的adorner效果

public

class

notifyadorner : adorner

;_grid = new

canvas();

_grid.children.add(_image);

_visuals.add(_grid);

}public

void

showadorner()

public

void

hideadorner()

protected

override

intvisualchildrencount

}protected

override visual getvisualchild(int

index)

protected

override

size measureoverride(size constraint)

protected

override

size arrangeoverride(size finalsize)

}

這裡是原始碼

大家看**就能懂了

WPF 附加屬性

附加屬性的作用就是將屬性與資料型別 宿主 解耦,讓資料型別的設計更加靈活。其本質就是依賴屬性,兩者僅在註冊和包裝器上有一點區別。附加屬性 游標移動到類體中 花括號之間 輸入propa tab tab,附加屬性的框架就準備好了,繼續 tab tab 可以在幾個空缺間輪換並修改,直至按下enter。cl...

(四)附加屬性

舉個例子 假設我們有乙個人的類people,它有可能在與學校相關的工作中用到 記錄學號,專業,班級 它也有可能在與公司相關的工作中用到 部門,專案 所以我們在定義people類時不應該包含class,id等等,這些應該放在school這些類裡,因為id,class等是學校附加給people的。在wp...

WPF 附加屬性

1 附加屬性 乙個屬性原來不屬於某個物件,但由於某種需求而被後來附加上去。附加屬性的本質是依賴屬性。2 附加屬性作用 將屬性與資料型別解耦,讓資料型別的設計的更加靈活。3 vs 2008中,依賴屬性的snippet是propdp,附加屬性的snippet是propa,屬性的snippet是prop。...