写点什么

WPF 学习——依赖项属性,中软国际 java 面试流程

作者:Java高工P7
  • 2021 年 11 月 10 日
  • 本文字数:1732 字

    阅读完需:约 6 分钟

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


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


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


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


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


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


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


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


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


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


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


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


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


属性值是独立的。


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


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


<span style="font-size:24px;">public class Student


{


public string Name { set; get; }


}</span>


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


<span style="font-size:24px;"><Window x:Class="Dp_Project.MainWindow"


xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"


xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"


Title="MainWindow" Height="180" Width="300" Loaded="Window_Loaded_1">


<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>


</span>


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


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


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


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

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
WPF学习——依赖项属性,中软国际java面试流程