原文:
wpf adorner+附加屬性 實現控制項友好提示
標題太空泛,直接上圖
無論是在驗證啊,還是提示方面等一些右上角的角標之類的效果,我們會怎麼做?
這裡介紹一種稍微簡單一些的方法,利用附加屬性和adorner來完成。
例如wpf自帶的控制項上要加這樣的效果,首先繼承自原控制項然後重寫是可以的,但是控制項型別太多,重寫不過來。這個時候我們唯一能新增的只有附加屬性了。
利用附加屬性的屬性變更事件propertychangedcallback,我們可以獲取到宿主物件即button,然後就可以往button上加入我們自定義的adorner了。再新增乙個附加屬性控制adorner的顯示/隱藏,那麼就很完美了,這樣每個控制項只用設定兩個附加屬性就能擁有上面的效果。下面是核心**,
附加屬性
public然後是我們自定義的adorner效果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
}
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。...