久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

[轉(zhuǎn)]WPF 依賴項(xiàng)屬性

 昵稱10504424 2013-12-27

UI軟件中經(jīng)常會(huì)用到大量的控件,,而每一個(gè)控件都是一個(gè)對(duì)象,每一個(gè)類都會(huì)有大量的屬性,,如果沒創(chuàng)建一個(gè)對(duì)象就將所有的屬性都創(chuàng)建出來,,無非會(huì)占用大量的內(nèi)存,wpf使用依賴項(xiàng)屬性來提升了性能,。

查看任何一個(gè)控件的定義,,以button為例,都會(huì)發(fā)現(xiàn)類內(nèi)包含大量的依賴性屬性定義,,注意到其中DependencyProperty都是static readonly的,,而每一個(gè)依賴項(xiàng)屬性都會(huì)有一個(gè)去掉“Property”的CLR屬性和他對(duì)應(yīng),而我們?cè)趚aml中訪問的都是CLR屬性,。

  

如果我們自定義一個(gè)依賴項(xiàng)屬性,,方法是這樣的

注意到使用DependencyProperty的靜態(tài)方法register將該屬性注冊(cè)到DependencyProperty上,DependencyProperty類的內(nèi)部包含一個(gè)hashtable,,所
有的依賴項(xiàng)屬性都存在這個(gè)哈希表中,,哈希表的key為由DependencyProperty的name和ownertype組成的類,且使用name+ownertype作為的哈希值,這
樣就可以確保每個(gè)key是不重復(fù)的

依賴項(xiàng)屬性到底是怎么樣節(jié)約內(nèi)存的呢,,由于我們創(chuàng)建控件對(duì)象時(shí)只會(huì)設(shè)置很少一部分屬性,,大部分屬性都是使用默認(rèn)值,默認(rèn)值也就是所有的對(duì)象都是一樣的,那就可以使用靜態(tài)屬性來表示了,,上面提到的存儲(chǔ)依賴項(xiàng)屬性的hashtable就發(fā)揮作用了,,clr將所有沒有設(shè)置的屬性存放在這個(gè)hashtable中,對(duì)于設(shè)置了值的屬性,,則會(huì)為這個(gè)對(duì)象創(chuàng)建一個(gè)數(shù)組,,類型為EffectiveValueEntry,包含了一個(gè)屬性的index,,dependencyproperty提供了一個(gè)方法getglobalindex來獲取此屬性在hashtable中的位置,,value當(dāng)然就可以在此取出。

這也是為什么依賴項(xiàng)屬性注冊(cè)為static readonly的卻可以修改的原因,。

依賴項(xiàng)屬性還給我們提供了什么其他好處

數(shù)據(jù)綁定:當(dāng)我們綁定到數(shù)據(jù)源時(shí),,如果數(shù)據(jù)源的變更要想通知到UI,就需要實(shí)現(xiàn)inotifypropertychange接口,,但如果將綁定源聲明為依賴項(xiàng)屬性,,則可以直接通知更新UI。

本地值:動(dòng)畫改變的屬性只是改變臨時(shí)變量,,并未改變屬性值

附加屬性和附加事件:

附加屬性是全局的依賴屬性,,依賴屬性屬于某個(gè)類,而附加屬性可以用在其他對(duì)象上

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多