经验之谈:企业开发之WPF必备技能

WPF篇章

1.全称

WPF的全称为:Windows Presentation Foundation,Windows呈现基础。(调侃:我佩服)

2.MVVM

MVVM是Model-View-ViewModel的简写,本质就是MVC 的改进版,将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。

3.背景

微软推出的第四代开发框架,上一代是WinForm,当时推出是为了对抗J2EE。

4.路由事件

4.1简单事件模型
主要包括几个部分:事件的拥有者、事件、事件处理器、订阅关系。简单举例,有一个name为button的按钮,点击时调用方法button_Click,则事件的拥有者为button,事件为Click事件,事件处理器为button_Click,订阅关系在xaml.cs中可以写为:button.Click += button_Click。
4.2路由事件模型
传统的简单事件模型中,消息激发是将消息通过事件订阅的然后交给事件的响应者,事件的响应者使用事件的处理器来做出响应。这样就存在一个问题,用户控件内部的事件就不能被外界订阅,因为事件的宿主必须能够直接访问到事件的响应者。
路由事件的事件拥有者和事件的响应者之间则没有直接的显式订阅关系,事件的拥有者则只负责激发事件,事件将有谁响应它并不知道。事件的响应者则有事件的监听器,针对事件进行监听,当有此类事件传递至此事件响应者就使用事件处理器来响应事件并决定此事件是否继续传递。比如按钮点击,点击后事件就开始激发了,然后事件就会在控件树上进行传递,事件的响应者安装了监听器,当监听到这个事件进行响应,并决定这个事件是否继续传递。
如果当事件在某个节点处理以后,不想让它继续传递,可以把它标记为“已处理”,就会停止路由,所有的路由事件都共享一个公共的事件数据基类 RoutedEventArgs。RoutedEventArgs 定义了一个采用布尔值的 Handled 属性。把事件设为已处理只要把Handled属性设为true即可。
4.3自定义路由事件
三个步骤:1、声明并注册路由事件;2、为路由事件添加CLR事件包装;3、创建可以激发路由事件的方法。

5.数据绑定

5.1组成部分
绑定源、绑定路径、绑定目标对象、绑定目标属性(必须为依赖项属性)。
5.2简单实现
界面上有一个TextBox和一个Label,TextBox中输入的内容实时显示到Label上。
5.3绑定流方向
绑定流方向是由Binding类对象的Mode属性设置的,它共有四种方向:
OneWay,绑定源的属性值可以影响绑定目标属性的值;
TwoWay,绑定源的属性值可以影响绑定目标属性的值,同样的绑定目标属性的值改变了也会影响绑定源属性的值;
OneWayToSource,绑定目标属性的值改变可以影响绑定源属性的值;
OneTime,绑定源属性的值在初始时绑定到绑定目标属性的值上,后面不再有任何影响。

6.自定义控件

相当于自己建一个用户控件,里面是一个或多个基础控件的组合。比如一个TextBox右侧组合两个按钮,实现能够点击按钮能够对文本框中的数字进行增减的功能。简单实现:xaml里定义两行两列布局,TextBox设置Row=0,Column=0,RowSpan=2,自增按钮设置Row=0,Column=1,自减按钮设置Row=1,Column=1,根据实际情况调整行列占比和控件宽高即可。xaml.cs里设置几个依赖属性,比如上限UpperLimit,下限LowerLimit,步长StepLength(每点击一次按钮增加或减少的量)。根据需要,还可以给依赖属性设置回调方法,作用是当属性值改变时触发相应方法以做一些处理。

7.自定义样式

WPF可以在ResourceDictionary里写自己想要的Style,然后在需要引用的界面引用,控件可以通过样式文件里Style的Key匹配,也可以不设Key根据Style的TargetType匹配。实际应用中,可以利用VS的Blend工具设计一些样式,然后把xaml文件提取到项目中使用。

8.多语言策略

实际开发中,经常会用到软件需要支持多种语言的情况。可以把每一种语言写一个资源文件,文件里将每一个短语或句子写在s:String尖括号中(需要添加引用xmlns:s=“clr-namespace:System;assembly=mscorlib”)。然后给每一个定义Key值,不同语言文件中的相同短语定义一个Key值,然后在程序中相应的控件处引用这个Key值,需要切换语言时,只需在后台替换不同语言的资源文件即可。

9.学习路径及解决问题方法

在开发时遇到不会的问题时,比如某一控件或某一控件的属性或方法不了解,或者一些函数不会用,可以在程序里按F1。这样会打开浏览器并进入到MSDN,并且定位到你相应的问题处,这样就可以看官方的一些资料,往往能解决问题。这种解决方法,主要针对WPF的控件问题或是C#函数或方法的不熟悉问题。
度娘比较常用,直接输入问题即可,技术问题的话,可以多去CSDN转转。除此,bing也可以作为查找问题的手段,可以多去Stack Overflow转转,在国际中的地位相当于中国的CSDN。
真正解决问题时,以上手段只是提供给你线索,具体还需要自己思考。遇到任何问题,不去绕开它,而是像这样去主动寻求解决办法。这些都将成为个人经验,日后终将化为个人的能力。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秦朝炼丹师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值