`
WPComming
  • 浏览: 57790 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

继续聊WPF——依赖项属性(1)

 
阅读更多

本系列文章是从我的QQ空间拷过来的。

依赖项属性可以称得上是WPF中比较难理解的概念,为了搞清楚这个概念,我都把.NET类库进行了反编译,但是,其结果我也是想到了的,微软不是傻子,.NET那么庞大,就算能被你反编译了,你也看不懂它的代码。

所以说,经过我一番研究,虽然没有把.NET的每一行代码都弄明白,不过,黄天终不负有心人,依赖项属性的使用方法与基本原理,我可以说已经弄明白了,恰巧,前两天在网上看到一篇讨论依赖项属性的文章,写得还不错,作者估计也是一位高人,再加上我个人的研究,从实际应用的角度来说,我现在已经掌握了依赖项属性的使用方法了,不妨告诉你,其实很简单,可以这么说,整个WPF都很简单,和许多刚接触WPF的朋友一样,一开始我也是认为它很复杂很难懂。

为什么这样说呢?大家都知道,微软官方总是为它自己推出的产品配备很完备的文档,对,就是那个很出名的MSDN。

许多初学WPF的朋友,一定也会像我一样,去查阅MSDN,通过上面的介绍来入门,可杯具正是发生在这个时候,WPF的难懂难学就是被微软自己的文档所误导,先别说翻译的质量不好,就算你看英文原文,你大概也会看得头晕。

真的,那些概念模型实在太抽象了,从刚接触WPF到现在,我都不知道把MSDN翻了多少遍了,甚至查到微软都把我的IP列入黑名单了,呵呵,而且,我也下载了英文原版的SDK来对比研究。

说实话,对.NET类库进行反编译的学习方法效率很低,表面上说可以更深入地了解.NET框架,但是,我不推荐这样学习,真的,得不尝失,花费很多精力和时间,而收获甚少;还有就是,反编译.NET类库是属于侵权,哈,幸好我们都生活在没有法律的中国,不然,一定会被微软告上法庭。

这次反编译,完全出于无奈,因为有些概念的确难以理解。

在研究的同时,我也进行了反思,最后感悟是——还是那句老话:理论的东西,哪怕你把它背下来了,你永远也不懂。

对我们来说,学编程为了什么?不就是为了应用吗?也就是说用于实战,既然这样,其实我们不必把理论的东西钻得太死,不然,钻牛角尖容易走火入魔。

依赖项属性的重点在于“依赖”二字,既然是依赖了,也就是说:依赖项属性的值的改变过程一定与其它对相关,不A依赖B就B依赖A,或者相互依赖。

说白了,所谓依赖,主要应用在以下地方:

1、双向绑定。有了这个,依赖项属性不用写额的代码,也不用实现什么接口,它本身就俱备双向绑定的特性,比如,我把员工对象的姓名绑定到摇文本框,一旦绑定,只要文本框中的值发生改变,依赖项属性员工姓名也会跟着变化,反之亦然;

2、触发器。这个东西在WPF中很重要,比如,一个按钮背景是红色,我想让它在鼠标停留在它上面是背景变成绿色,而鼠标一旦移开,按钮恢复红色。

如果在传统的Windows编程中,你一定会想办法弄一些事件,或者委托来处理,还要写一堆代码。告诉你,有了依赖项属性,你将一行代码都不用写,所有的处理均由WPF属性系统自动处理。而触发器只是临时改变属性的值,当触完成时,属性值自动被“还原”。

3、附加属性。附加属性也是依赖项属性,它可以把A类型的的某些属性推迟到运行时根据B类型的具体情况来进行设置,而且可以同时被多个类型对象同时维护同一个属性值,但每个实例的属性值是独立的。

4、A属性改变时,也同时改变其它属性的值,如TogleButton按下的同时,弹出下拉框。

为了进行比较,我们先来说说传统面向对象编程中对类属性的定义,请看下面一个简单的类,它只有一个公共属性。


这时候,我们布局一下WPF主窗口,如下所示XAML:

<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="180" Width="300" Loaded="Window_Loaded">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="0" Text="姓名:"/>
<TextBox x:Name="txtName" Grid.Column="1" Grid.Row="0" Margin="0,5,20,5"/>
<TextBlock Grid.Column="0" Grid.Row="1" Text="改变值:"/>
<TextBox x:Name="txtCh" Grid.Column="1" Grid.Row="1" Margin="0,5,20,5"/>
<Button x:Name="btn" Grid.Row="2" Grid.ColumnSpan="2" Margin="70,5,70,5" Click="btn_Click">显示属性值</Button>
</Grid>
</Window>

在窗口的加载完成事件中,我们作两个绑定:

(1)把Student的实例的Name属性与textBox的text属性绑定;

(2)同时与第二个文本框也绑定。

运行程序,在第一个文本框中输入内容,再点一下第二个文本框,或点一下按钮,虽然第二个文本框也会随之改变,但并不是同步改变,而是当焦点离开第一个文本框后才发生改变,这就不属于同步了。

完整代码如下:


分享到:
评论

相关推荐

    WX小程序源码小游戏类

    WX小程序源码小游戏类提取方式是百度网盘分享地址

    grpcio-1.47.2-cp310-cp310-musllinux_1_1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    cryptography-42.0.3-cp37-abi3-musllinux_1_1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    2021131528+谢镕汕.zip

    2021131528+谢镕汕.zip

    sja1301.i386.tar.gz

    SQLyong 各个版本,免费下载 SQLyog是业界著名的Webyog公司出品的一款简洁高效、功能强大的图形化MySQL数据库管理工具。使用SQLyog可以快速直观地让您从世界的任何角落通过网络来维护远端的MySQL数据库。

    VB学生宿舍管理系统(源代码+论文).rar

    计算机专业毕业设计VB精品论文资源

    基于多种编程语言的露营服务平台设计源码

    本项目是基于多种编程语言的露营服务平台设计源码,包含4315个文件,其中包括1752个JavaScript文件、885个TypeScript文件、420个WXML模板文件、406个WXSS样式文件、403个JSON配置文件、233个Markdown文档、182个WXS文件、13个PNG图像文件和6个MAP文件。系统专注于提供露营服务平台功能,支持地点搜索、预订功能等功能,为用户提供了一个稳定、高效的露营服务平台。

    菜日常菜日常菜日常菜日常

    菜日常菜日常菜日常菜日常

    debugpy-1.6.7.post1-cp310-cp310-win_amd64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip

    源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip 源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip 源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip 源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip 源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip 源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip 源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip 源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip 源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip

    KF32Lxxx_StdPeriph_Lib.zip

    芯旺微 Kungfu芯片资料

    VB文档管理信息系统设计(源代码+系统+答辩PPT).rar

    计算机专业毕业时间之VB精品论文源代码资源

    1716894470778.jpg

    1716894470778.jpg

    SQLyog-13.1.5-0.x64Community.exe

    SQLyog-13.1.5-0.x64Community

    残差注意力-基于Pytorch实现的残差注意力网络-附项目源码-优质项目实战.zip

    残差注意力_基于Pytorch实现的残差注意力网络_附项目源码_优质项目实战

    不同月份用户手机账单数据,包括短信费用、上网费用、折扣金额等等

    不同月份用户手机账单数据,包括短信费用、上网费用、折扣金额等等 字段包括 sms_fee web_fee extra_fee total_fee discount extra_discount actual_fee paid_fee等等

    ADSP-BF533的例程源码1:EBIU总线驱动源码

    ADSP-BF533的EBIU总线驱动源码,

    源代码-ExcelToAccess批量导入数据 v1.0.zip

    源代码-ExcelToAccess批量导入数据 v1.0.zip

    h5py-2.7.1-cp35-cp35m-manylinux1_i686.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    ChipON IDE For KungFu8.zip

    芯旺微 Kungfu芯片资料

Global site tag (gtag.js) - Google Analytics