wpf控件开发基础(2) -属性系统(1)
距离上篇写的时间有1年多了.wpf太大,写的东西实在太多,我将依然围绕着自定义控件来展开与其相关的技术点. 也欢迎大家参与讨论.这篇我们将要讨论的是WPF依赖属性,接触过的朋友应该对其有所了解,但在我们讲WPF依赖属性之前,我们来看看在WPF出现之前.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; }
- }
- }
上面应该算是c#的最基础的属性,大家都很熟悉.
注意点:默认属性没有初始化,不然可能会发生很多未知的错误.
(以下可以选看,如果你接触过以下技术的话,其实也很简单)
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服务器控件.
asp.net控件着重在于呈现,每次刷新页面都将会调用RenderContents方法,这样就不管属性有没发生变化,都将得到重新呈现.即此处不需要属性发生变化,进行UI重绘通知.
注意点:如果强制要求ControlName属性必须是有值的,以保证输入结果的有效性,那么可以在get方法里处理
- get
- {
- if (_controlName == null) _controlName = string.Empty;
- return _controlName;
- }
WinForm自定义控件属性
当属性发生变化时并未重绘,必须手动调用Invalidate方法以进入OnPaint方法重绘
注意点:如果要重绘界面的话,必须手动调用方法
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的变量类型没有强类型,比如设置dom的宽度,其类型只能是整型,如果以字符串进行传值的话将会出错(当然这是人为的).
(不知道做过js前端控件的人有没这种感觉,定义了一个属性然后重新赋值重绘控件是一件痛苦的事,必须手动调动,而且会影响整个控件设计.)
注意点:要对于属性的赋值的有效性进行验证.
从以上几个例子,我们可以看出单纯的属性是无法满足程序需求的.
既以上的需求是有必要的,并且常常发生,而且非常频繁.
标准化解决方案
以上介绍了属性存在的一系列问题,那么有问题就会有简化的方案.
以下是个人总结的话
- 当一项技术比较复杂的时候,就会有人出来定义一套标准,以简化技术,提高生产效率.
- 不管设计者考虑的如何周密,一旦标准定义下来,就会丧失灵活性.
- 标准可能与你个人习惯想冲突,你必须去学会接受标准
回到WPF话题,那么在WPF中这个解决方案就是依赖属性(DependencyProperty)
好了,这篇只是一个引子,如果你在使用属性时,遇到过这些问题,那么你将有所感触.
如果你有认识到属性真实存在以上问题,那么这篇文章就算完成任务了.
这篇并不打算展开.下篇将再次介绍WPF依赖属性系统
欢迎大家展开讨论.
wpf控件开发基础(2) -属性系统(1)的更多相关文章
- wpf控件开发基础(3) -属性系统(2)
原文:wpf控件开发基础(3) -属性系统(2) 上篇说明了属性存在的一系列问题. 属性默认值,可以保证属性的有效性. 属性验证有效性,可以对输入的属性进行校验 属性强制回调, 即不管属性有无发生变化 ...
- wpf控件开发基础(4) -属性系统(3)
原文:wpf控件开发基础(4) -属性系统(3) 知识回顾 接上篇,上篇我们真正接触到了依赖属性的用法,以及依赖属性的属性元数据的用法,并且也实实在在地解决了之前第二篇提到的一系列问题.来回顾一下 属 ...
- wpf控件开发基础
wpf控件开发基础(3) -属性系统(2) http://www.cnblogs.com/Clingingboy/archive/2010/02/01/1661370.html 这个有必要看看 wpf ...
- wpf控件开发基础(5) -依赖属性实践
原文:wpf控件开发基础(5) -依赖属性实践 知识回顾 接上篇,回顾这三篇讲了什么东西 首先说明了属性的现存问题,然后介绍了依赖属性的基本用法及其解决方案,由于依赖属性以静态属性的方式存在,进而又介 ...
- asp.net控件开发基础(1)(转)原文更多内容
asp.net本身提供了很多控件,提供给我们这些比较懒惰的人使用,我认为控件的作用就在此,因为我们不想重复工作,所以要创建它,这个本身便是一个需求的关系,所以学习控件开发很有意思. wrox网站上有本 ...
- WPF控件开发(2) 自动完成(AutoComplete)-1
自动完成功能使用范围很广,多以TextBox或ComboBox的形式出现,在输入的同时给予候选词,候选词一般有两种方式获取. 一种类似Baidu,Google,Bing之类的搜索引擎所用的直接给予前十 ...
- 跟我一起学WPF(2):WPF控件基础
WPF控件简介 通过上一篇XAML语言的介绍,我们知道,XAML是一个树形结构,同样,WPF控件作为构成整个XAML树的一部分,也是一个树形结构.我们看一个简单的例子. <Button.Cont ...
- 浅谈Winform控件开发(一):使用GDI+美化基础窗口
写在前面: 本系列随笔将作为我对于winform控件开发的心得总结,方便对一些读者在GDI+.winform等技术方面进行一个入门级的讲解,抛砖引玉. 别问为什么不用WPF,为什么不用QT.问就是懒, ...
- C# Winform开发以及控件开发的需要注意的,被人问怕了,都是基础常识
我是搞控件开发的,经常被人问,所以把一些问题记录了下来!如果有人再问,直接把地址丢给他看. 一. 经常会有人抱怨Winform界面闪烁,下面有几个方法可以尽可能的避免出现闪烁 1.控件的使用尽量以纯色 ...
随机推荐
- 2、JNI说明
JNI (Java Native Interface) 1. JAVA调用CLinux是用C语言写的,可以写一个APP简单调用open,read,write来访问驱动程序;Android是用Java写 ...
- 【例题 6-2 UVA - 514】Rails
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 栈模拟一下就好. 每个输出段后面都有一个空行. 包括最后一个. [代码] #include <bits/stdc++.h> ...
- 怎样在一个fragment or 随意类中操作还有一个fragment中的方法
1 怎样在acitivty中运行fragment中的方法: 首先获得这个Fragment的对象 xxxFragment fragmentObject = (xxxFragment) getFragme ...
- 影响stm32仿真的因素
可能是因为电池电量不足??? 电量不足可能会妨碍SD卡的挂载
- VS2012调试C++工程DLL
1.C++工程属性对话框 2.配置属性: (1)常规:输出目录:..\Bin\WFCrawler(调用DLL的工程) 中间目录:..\Bin\WFCrawler(调用DLL的工程 ...
- crontab经验 分类: B3_LINUX 2015-03-06 11:17 282人阅读 评论(0) 收藏
1.基本格式 第1列分钟1-59 第2列小时1-23(0表示子夜) 第3列日1-31 第4列月1-12 第5列星期0-6(0表示星期天) 第6列要运行的命令 2.关于日志 (1)基本日志位 ...
- MyCAT分表初体验
1.mycat二进制包安装 下载地址:http://dl.mycat.io/ tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar ...
- 二次封装CoreData
(1)创建一个Data Model文件.命名为MyModel.xcdatamodeld (2)创建Users表,加入如图的字段 (3)创建NSManagedObject subclass表实体文件 ( ...
- Lucene学习总结之八:Lucene的查询语法,JavaCC及QueryParser 2014-06-25 14:25 722人阅读 评论(1) 收藏
一.Lucene的查询语法 Lucene所支持的查询语法可见http://lucene.apache.org/java/3_0_1/queryparsersyntax.html (1) 语法关键字 + ...
- 提高编程能力的7条建议 分类: T_TALENT 2014-04-12 10:41 294人阅读 评论(0) 收藏
编程是非常酷的一件事情,但是在酷炫的背后它对很多人来说还是挺难的.很多人在学习编程之初就被困难击败了. 当你不熟悉编程的时候,你可能会觉得无从下手,并且不知道如何运用学到的知识.只要你通过了这一困难的 ...