国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

wpf控件開發(fā)基礎(chǔ)(2) -屬性系統(tǒng)(1)

2019-11-17 03:50:13
字體:
供稿:網(wǎng)友
   距離上篇寫的時間有1年多了.wpf太大,寫的東西實(shí)在太多,我將依然圍繞著自定義控件來展開與其相關(guān)的技術(shù)點(diǎn). 也歡迎大家參與討論.這篇我們將要討論的是WPF依賴屬性,接觸過的朋友應(yīng)該對其有所了解,但在我們講WPF依賴屬性之前,我們來看看在WPF出現(xiàn)之前.net中的屬性是如何使用的.

普遍存在的屬性問題
c#基本屬性
asp.net自定義控件屬性
WinForm自定義控件屬性
javascript自定義控件屬性
c#基本屬性


namespace WPFControlTutorialPart2_Basic
{
    public class Person
    {
        PRivate string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        //自動屬性
      public int Age { get; set; }
    }
}

上面應(yīng)該算是c#的最基礎(chǔ)的屬性,大家都很熟悉.

注意點(diǎn):默認(rèn)屬性沒有初始化,不然可能會發(fā)生很多未知的錯誤.

(以下可以選看,如果你接觸過以下技術(shù)的話,其實(shí)也很簡單)

ASP.NET自定義控件屬性

namespace WPFControlTutorialPart2_WebApp
{
    public class WebFromControl : WebControl
    {
        private string _controlName;
        public string ControlName
        {
            get
            {
                return _controlName;
            }
            set
            {
                _controlName = value;
            }
        }

        protected override void RenderContents(HtmlTextWriter output)
        {
            output.Write("控件名字是:"+ControlName);
        }
    }
}

上面是一個簡單的自定義的Web服務(wù)器控件.

asp.net控件著重在于呈現(xiàn),每次刷新頁面都將會調(diào)用RenderContents方法,這樣就不管屬性有沒發(fā)生變化,都將得到重新呈現(xiàn).即此處不需要屬性發(fā)生變化,進(jìn)行UI重繪通知.

注意點(diǎn):如果強(qiáng)制要求ControlName屬性必須是有值的,以保證輸入結(jié)果的有效性,那么可以在get方法里處理

get
{
    if (_controlName == null) _controlName = string.Empty;
    return _controlName;
}
WinForm自定義控件屬性

當(dāng)屬性發(fā)生變化時并未重繪,必須手動調(diào)用Invalidate方法以進(jìn)入OnPaint方法重繪

注意點(diǎn):如果要重繪界面的話,必須手動調(diào)用方法

Javascript自定義控件屬性

<div id="demoDiv" style="background-color: Red">hello</div>

<script>
    function ElementControl(elementName) {
        this.element = document.getElementById(elementName);
    }
    ElementControl.prototype.setWidth = function(width) {
        this.element.style.width = width;
    }
    var obj = new ElementControl("demoDiv");
    obj.setWidth("hello");
   
</script>

javascript的變量類型沒有強(qiáng)類型,比如設(shè)置dom的寬度,其類型只能是整型,如果以字符串進(jìn)行傳值的話將會出錯(當(dāng)然這是人為的).

(不知道做過js前端控件的人有沒這種感覺,定義了一個屬性然后重新賦值重繪控件是一件痛苦的事,必須手動調(diào)動,而且會影響整個控件設(shè)計.)

注意點(diǎn):要對于屬性的賦值的有效性進(jìn)行驗(yàn)證.

從以上幾個例子,我們可以看出單純的屬性是無法滿足程序需求的.
既以上的需求是有必要的,并且常常發(fā)生,而且非常頻繁.

標(biāo)準(zhǔn)化解決方案

以上介紹了屬性存在的一系列問題,那么有問題就會有簡化的方案.

以下是個人總結(jié)的話

當(dāng)一項(xiàng)技術(shù)比較復(fù)雜的時候,就會有人出來定義一套標(biāo)準(zhǔn),以簡化技術(shù),提高生產(chǎn)效率.
不管設(shè)計者考慮的如何周密,一旦標(biāo)準(zhǔn)定義下來,就會喪失靈活性.
標(biāo)準(zhǔn)可能與你個人習(xí)慣想沖突,你必須去學(xué)會接受標(biāo)準(zhǔn)
回到WPF話題,那么在WPF中這個解決方案就是依賴屬性(DependencyProperty)

好了,這篇只是一個引子,如果你在使用屬性時,遇到過這些問題,那么你將有所感觸.

如果你有認(rèn)識到屬性真實(shí)存在以上問題,那么這篇文章就算完成任務(wù)了.

這篇并不打算展開.下篇將再次介紹WPF依賴屬性系統(tǒng)

歡迎大家展開討論.


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 保靖县| 田东县| 霍城县| 新丰县| 奇台县| 黄梅县| 台江县| 天全县| 哈密市| 阜康市| 措勤县| 五台县| 清苑县| 清涧县| 临武县| 安多县| 吐鲁番市| 苏尼特右旗| 抚松县| 临夏县| 交口县| 新和县| 宾阳县| 大庆市| 佛学| 滨州市| 临城县| 湘潭市| 萨迦县| 肇州县| 招远市| 通江县| 武夷山市| 克东县| 平遥县| 同德县| 兰溪市| 东乡| 寿光市| 平塘县| 原平市|