WP记录DependencyProperty学习(1)

很早之前就看到DependencyProperty,但是每次看到都不想去深入,一眼看过去好难的样子,今天静下来学习一下,怕自己过几天又忘了,来记录一下自己学习的东西。

首先我们来看看这个东西,

public static readonly DependencyProperty ItemContainerStyleProperty =
            DependencyProperty.Register("ItemContainerStyle", typeof(string), typeof(MyControl), new PropertyMetadata(null, OnItemContainerStylePropertyChanged));

第一眼被吓懵了,都干嘛的,好厉害的样子,下面慢慢来说:上面就是定义了一个依赖属性,干嘛用的,看名字就是用来设置属性的,来看看参数ItemContainerStyle这个相当于标示符,在你写xaml设置的时候,系统会去找到你设置的这个名字进行操作,typeof(string)设置类型,typeof(MyControl)这个告诉系统你这个注册的属性是属于哪个类的,new PropertyMetadata(null, OnItemContainerStylePropertyChanged)属性值改变时触发的事件和属性的初始值

public string ContentInfo
        {
            get { return (string)GetValue(ItemContainerStyleProperty); }
            set { SetValue(ItemContainerStyleProperty, value); }
        }

上面这个应该没问题了,就是设置或者获取属性了,ContentInfo就是你调用自己写的控件时可以看到的属性了

[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经常看到吧,改一下FontSize="{TemplateBinding MyWidth}“,没错StyleTypedProperty就是关联cs里面的MyWidth属性

TemplateVisualState:这个就是我们经常看到的过度状态了,看看这个代码,是不是明白了

 <VisualStateGroup x:Name="SelectionStates">
            <VisualState x:Name="Selected"/>
        </VisualStateGroup>

说到底上面的这几个都是*.cs中对于*.xaml中定义的控件进行获取,并进行操作,xaml里面可以用cs里面设置的属性,cs里面可以调用.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写的,如果要实现listbox这种需要item这种单项内容的,还要加入继承ContentControl的item相应的属性的方法,要是觉的直接继承Control很多属性和事件都被加进来太多的话还可以自己写个DependencyProperty 和DependencyObject,详细可以参考一下这篇DependencyObject,更深入的以后学习了在发

 
时间: 2024-10-12 17:27:46

WP记录DependencyProperty学习(1)的相关文章

记录js学习之this用法

一直对Javascript中的this都有一种似是而非的感觉,今天突然感觉豁然开朗,特此记录一下. 咱们先看个栗子:    <!DOCTYPE html><html><head><meta charset="UTF-8"><title>this的使用</title><script type="text/javascript">var Car,tesla;Car=function ()

记录自己学习各种源码

最近在各位朋友的教育之下,终于对学习源码感兴趣了,不容易啊.再此开一篇博文,记录自己的学习历程.不论学习什么样的源码,相信对自己都是很大的帮助.(github上可能类似的很多,各位自行查找) 1. LineLayout(UICollectionView的线性布局) 主要技术: UICollectionViewFlowLayout

记录JAVA学习的历程之关于局部变量与成员变量

最近一段时间开始学习JAVA,遇到了不少问题. 写下这些东西,纯粹为了记录自己的学习历程,借此激励自己,希望能在程序员的路上越走越远. 在JAVA中, 我们会遇到局部变量与成员变量这两个变量的分类, 这是按声明位置划分的,下面是对这两个变量的简单定义. 局部变量:方法或语句块内部定义的变量. 成员变量:方法外部,类的内部定义的变量. 更重要的一点是在局部变量中,JAVA不会默认初始化,必须自行初始化. 而在成员变量中,JAVA可自行初始化,初始化变量的值 我以图片的形式给大家浏览学习 以上只是我

记录一下学习Android时遇到一些问题

实在是不擅长Android开发,但在努力的学习当中.这篇文章就记录一下学习过程中,自己犯下的一些错误,同时也让自己记住别再犯同样的错误了.各位看官勿见笑! 一个关于空指针的错误 错误类型一: 未对对象进行初始化导致了空指针的错误.类似于如下: public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.i(TAG, "------onActi

storm记录--5-- Storm学习的HelloWorld

Storm学习的HelloWorld 1.下载Storm-start(https://github.com/nathanmarz/storm-starter/archive/master.zip) 2.进入下载目录,对zip文件解压 3.进入解压后的文件目录,修改m2-pom.xml(将twitter4j-core和twitter4j-stream替换为下面的部分) <dependency> <groupId>org.twitter4j</groupId> <ar

学习历程(记录大学学习,电子信息科学类)

(目标:嵌入式) 学校授课 高数/线性代数 电路基础 模电 数电 微机原理(8086) 高频 C语言 vc++ eda 其他  :通信原理,数字信号处理 自学 Java(基础) c#(基础) 安卓应用开发(了解)  实践             51单片机开发 写主程序中的循环中断 C语言基础,汇编  x128(飞思卡尔)  底层驱动编写,修改移植  C语言提升(宏,共同体,结构体,枚举)  STM32  正在学习   正在进行:linux学习

记录前端学习的一年

一直都感觉自己是个运气不错的女孩,天天傻傻的,笑嘻嘻的,真是应证了那句话:爱笑的人运气不会太差~~~ 接触前端到学习前端,再到深入学习,整整一年,记得去年的这个月,还是一个完完全全的小白,从来没有奢望过什么. 最后,终于决定了走前端,话不多说,就是干! 由于自己进度落后于同学较多,所以那段时间就潜心地学习,没课就过去工作室泡着泡着. 之后,不停地寻找机会,阴差阳错,老师的公司招聘前端实习生,当时也没想那么多,直接报名笔试+面试,笔试内容是考java,面试就是问一下简单的html,css,如愿的进

记录我学习数据结构之路(七)

直接插入排序的基本操作:将一个记录插入到已经排好序的有序表中,从而得到一个新的.记录数增1的有序表. 这是书上写的操作,他是把数组的第一个位置空出来,从第二个位置开始开始放入数据,那么空出来的第一个位置就是用来暂时存放取出来的数值的.从数组的第三个位置开始取,取出来之后向前遍历,如果前一个值比它大,那么前一个人往后移动一位,直到找到不比取出来的数值大的,然后就把取出来的值插入那个值后面. 我就不用数组的第一个值作存放取出值了,数组从0位开始存,另外再声明了一个变量来存放取出来的值: public

记录类型(学习笔记)

定义记录类型 TYPE 类型名称 IS RECORD ( 成员名称 数据类型 [[NOT NULL] [:= 默认值] 表达式] , ... 成员名称 数据类型 [[NOT NULL] [:= 默认值] 表达式] ) ; 示例一.记录类型接收查询返回结果 --使用记录类型接收查询返回结果 DECLARE V_ENO EMP.EMPNO%TYPE; TYPE EMP_TYPE IS RECORD( --定义记录类型 ENAME EMP.ENAME%TYPE, JOB EMP.JOB%TYPE, H