- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CommandinWPF
Command in WPF WinForm命令的用途命令这个概念,最早是在AutoCAD中认识的,它可以由多种途径引发,进而执行一系列动作。在WPF中命令被附加了其他的特征,但其存在主要目的在于如下几点。重用逻辑:友好的界面为用户提供多种方式执行同一操作以迎合不同用户的习惯,如菜单条目、工具栏按钮、窗体快捷键、鼠标手势、显式命令行等。虽然也可以重用事件处理函数,但命令是更高级的抽象,也更加容易被理解。统一管理:某些动作只有在满足一定条件时才能被触发,而条件不满足时相应控件应为不可用的状态。命令可以(直接或间接)管理关联到自身的触发者,使其可用状态一同变化,这省去了编码时的很多麻烦。脚本控制:命令从事件处理函数中独立出来,使其单独调用更加方便,从而简化命令行或脚本方式的控制。历史记录:命令的抽象化在某种程度上是操作历史的前提,这使得实现/view/1151640.htmCommand模式的撤销、重做功能成为可能(本文不讨论Command模式的实现)。WPF中的命令在学习WPF的命令模型时,首先接触到的是ICommand接口(System.Windows.Input名空间)。public interface ICommand{void Execute(object parameter);bool CanExecute(object parameter);event EventHandler CanExecuteChanged;}观察其成员,发现实现该接口的类实例应当包含一个执行逻辑、一个可用性判断逻辑及其变更事件,但是实际上在WPF中使用的RoutedCommand(System.Windows.Input名空间)并没有简单的实现这个接口,而是拓展了该接口并与其他几个类构成了较为复杂的命令模型(主要是为了应用路由事件)。从图中可见,参与一次完整的命令调用需要(至少)三个主体实例:作为指令调用发出方的Command Trigger、作为命令事件激发点的Command Target、以及接收命令事件并进行处理的Parent UIElement。其中CommandTrigger可以是菜单项、按钮等实现ICommandSource接口的类的实例,它会包含一个名为Command的成员,这个Command是RoutedUICommand的实例(继承自RoutedCommand,后者实现ICommand接口),RoutedCommand类重写了Execute和CanExecute方法,在执行命令时Execute方法会从CommandTarget引发CommandBinding.Executed事件。CommandTarget是界面上的元素,命令可以定位到它可能是出于两种情况,一是通过指定ICommandSource的CommandTarget属性,二是(当没有指定ICommandSource.CommandTarget时)元素持有焦点。注意:Target单词意味“目标”,是指Command对象激发路由事件的目标;CommandBinding.Executed是路由事件,因此可以在ICommand.Execute方法中调用RaiseEvent触发。路由事件沿可视化树向上冒泡,沿途的UIElement在其CommandBindings集合中检测事件对应的CommandBinding对象,若检测到则执行CommandBinding.Execute方法,进行真正的逻辑处理。注意:CommandTrigger并不一定处于CommandTarget和ParentUIElement相同的可视化树中。实现WinForm的命令在传统的WinForm中不存在路由事件,因此可以相对简单的实现Command类,下面直接给出源码。using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Forms;using System.ComponentModel;namespace IEPI.App.Utility{ /// summary /// 一条命令可以包含多个触发器,并同步触发器可用状态 /// /summary public class Command { /// summary /// 实例化命令 /// /summary /// param name=Description对命令的描述/param /// param name=Excution命令触发事件的执行体/param public Command(string Description, EventHandler Excution) { this.Trigg
文档评论(0)