很早之前就看到DependencyProperty,但是每次看到都不想去深入,一眼看過去好難的樣子,今天靜下來學習一下,怕自己過幾天又忘了,來記錄一下自己學習的東西。
首先我們來看看這個東西,
public static readonly DependencyProperty ItemContainerStyleProperty = DependencyProperty.Register( " ItemContainerStyle " , typeof (string), typeof (MyControl), new PropertyMetadata( null , OnItemContainerStylePropertyChanged));
第一眼被嚇懵了,都干嘛的,好厲害的樣子,下面慢慢來說:上面就是定義了一個依賴屬性,干嘛用的,看名字就是用來設置屬性的,來看看參數(shù)ItemContainerStyle這個相當于標示符,在你寫xaml設置的時候,系統(tǒng)會去找到你設置的這個名字進行操作,typeof(string)設置類型,typeof(MyControl)這個告訴系統(tǒng)你這個注冊的屬性是屬于哪個類的,new PropertyMetadata(null, OnItemContainerStylePropertyChanged)屬性值改變時觸發(fā)的事件和屬性的初始值
public string ContentInfo { get { return ( string )GetValue(ItemContainerStyleProperty); } set { SetValue(ItemContainerStyleProperty, value); } }
上面這個應該沒問題了,就是設置或者獲取屬性了,ContentInfo就是你調(diào)用自己寫的控件時可以看到的屬性了
[TemplatePart(Name = InnerSelectorName, Type = typeof (LongListSelector))] [StyleTypedProperty(Property = "MyWidth " , StyleTargetType = typeof (MyControl))] [TemplateVisualState(Name =”Selected“, GroupName = "SelectionStates")]
剛看到上面這幾個大括號我又懵了,慢慢來吧:
TemplatePart的作用是*.cs中對于*.xaml中定義的控件進行獲取,并進行操作,不好理解,其實就是在資源字典ResourceDictionary中(也就是一個.xaml)定義中可以使用.cs的屬性一些東西,.cs可以使用到.xaml里面的動畫一些東西
StyleTypedProperty:?FontSize="{TemplateBinding FontSize}“這個大家應該在自定義控件時在.xmal經(jīng)常看到吧,改一下FontSize="{TemplateBinding?MyWidth}“,沒錯StyleTypedProperty就是關聯(lián)cs里面的MyWidth屬性
TemplateVisualState:這個就是我們經(jīng)常看到的過度狀態(tài)了,看看這個代碼,是不是明白了
<VisualStateGroup x:Name= " SelectionStates " > <VisualState x:Name= " Selected " /> </VisualStateGroup>
說到底上面的這幾個都是*.cs中對于*.xaml中定義的控件進行獲取,并進行操作,xaml里面可以用cs里面設置的屬性,cs里面可以調(diào)用.xmal里面寫的個種動畫效果
?
然后來說說EventHandler事件,來代碼
public event EventHandler ManipulationStateChanged; public event PropertyChangedEventHandler PropertyChanged; public override void OnApplyTemplate() { base .OnApplyTemplate(); _myControl.Clear(); if (_myControl!= null ) { _myControl.ManipulationStateChanged -= OnInnerSelectorManipulationStateChanged; _innerSelector.PropertyChanged -= OnInnerSelectorPropertyChanged; } _myControl = this .GetTemplateChild(InnerSelectorName) as LongListSelector; if (_myControl!= null ) { _myControl.ManipulationStateChanged += OnInnerSelectorManipulationStateChanged; _myControl.PropertyChanged += OnInnerSelectorPropertyChanged; } }
這個比較簡單了,就是事件的訂閱和取消了
?
上面這些都是繼承Control寫的,如果要實現(xiàn)listbox這種需要item這種單項內(nèi)容的,還要加入繼承ContentControl的item相應的屬性的方法,要是覺的直接繼承Control很多屬性和事件都被加進來太多的話還可以自己寫個DependencyProperty 和DependencyObject,詳細可以參考一下這篇DependencyObject,更深入的以后學習了在發(fā)
?
?
?
?
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
