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

继续聊WPF——自定义命令

 
阅读更多
作为春节前的最后一篇技术文章,写点什么呢?想了一下,就聊聊WPF中的命令吧。
命令这东西很有意思,简明一点说,它是一种逻辑,但这种逻辑可以被多种源调用,可以作用于多种目标上。如我们常见的“复制”,“剪切”等命令,它们本身就是一种逻辑——对剪切板进行操作的逻辑行为,不过,你会发现,它们不仅可以在菜单项中使用,也可以在工具栏按钮上使用,也可以通过快捷键Ctrl + C等来调用。

菜单项

工具栏按钮

从上面的举例可以发现,命令可以使用具备相同功能的代码逻辑变得通用化,就像我们封装了一个类一样,可以在N个地方进行调用,这样我们不必每次都写相同的代码。

.NET类库已为我们准备了许多通用命令,使用起来也很简单,这里就不说了,大家可以参考MSDN上相关说明,本文的主题是自定义命令,在讲述自定义命令之前,先了解一下与命令有关的几个要素,就像我们常说的“记叙文六要素”一样,一个完整的命令应当包括:

1、命令,这当然是核心部分了;

2、命令源:命令是谁发出的;

3、目标,命令作用在哪些元素上,如往文本框中粘贴内容,那么该TextBox就是命令目标;

严格上说,命令是实现了ICommand接口的类,但是,在际使用中,我们不必这样做,一种有效的方法是在某个类中直接声明一个RouteCommand类的成员字段即可,一般使用Static关键字,这样可以使得命令只与类有关,而不必理会其属于哪个实例。

下面,我们一起动手完成一个实例:

1、新建一个WPF应用程序,如何新建?(略);

2、布局好主窗体,我们重点是需要两个文本框和一个按钮,其它的自己喜欢;

3、使用CommadBinding把命令添加到窗体类的CommandBindings集合中。

4、在按钮上设置Command属性。


在上面的XAML中,我们要注意的是,要引入我们定义了路由命令的类所在的命名空间。
接下来,我们要编写两个事件处理程序——CanExecute确定命令是否可用;Executed命令逻辑应写在这里。

这样我们会有一个疑问,事件的引发者是谁?命令目标又是谁?

我们在Executed事件处理程序的开始处下一个断点,然后单步跟入。

得到的结果如下:

sender是主窗体。

ExecutedRoutedEventArgs的Source属性就是命令目标。

但是,当我们运行的时候,我们发现字体变成蓝色的并不是文本框,而是按钮,为什呢?

我们仔细阅读一下MSDN文档及相关说明就知道了,因为我们没有设置Target,所以,默认的是当前获得焦点的元素将成为命令目标。

下面我们改一个上面的XAML让Button的CommandTarget指向第二个文本框。


现在运行一下,可以发现,点击按钮后,第二个文本框的前景色就变成蓝色了。

CanExecute事件和Executed事件都是路由事件,当然,RouteCommand类也包含遂道事件,至于什么是路由事件,什么是遂道事件,不在本文讲述的范围之中。

以路由事件为例,下面我们来做第二个示例。这个示例,窗体上有一个StackPanel,里面包含一个按钮,同时,把CommandBinding添加到该StackPanel上,而该StackPanel里面再嵌套一个DockPanel,同样,把同一个命令也添加到DockPanel上,DockPanel里面再包含一个Canvas,但是Canvas不添加CommandBinding,然后,在Executed事件处理程序中分别输出引发事件的类型,命令目标类型和目标的Name属性的值。

[XAML]


[C# Code]


然后,我们运行程序,依次点击这三个按钮,接着打开“输出”窗口观察一下。

得到的结果如下:


发现了什么?从调试信息中看到,后两次执行命令,引发事件的类型都是DockPanel,这也符合路由事件沿可视化树往上冒泡的原则了。

因为Canvas中我们没有绑定命令,所以在Canvas上无法引发事件,于是,向上路由到DockPanel,所以后两次事件的触发者都是DockPanel。

接下来,我们还要动手做第三个示例,示例不通过控件来执行命令,而是通过快捷键Ctrl + Alt + Y来激活。


运行程序,当窗口处于活动状态,然后按下Ctrl + Alt + Y,你就看到效果了。

分享到:
评论

相关推荐

    WPF揭秘——wpf基础教程

    **WPF揭秘——深入理解Windows Presentation Foundation** Windows Presentation Foundation(WPF)是Microsoft .NET Framework的一个重要组成部分,它为开发者提供了构建桌面应用程序的强大工具。这个基础教程将带...

    WPF入门实例——WPF目录树实例

    在本文中,我们将深入探讨WPF(Windows Presentation Foundation)中的目录树实现,特别是基于`TreeView`控件的...这是一个很好的起点,对于深入学习WPF的其他高级特性,如命令、事件处理和样式定制,也非常有帮助。

    WPF Binding绑定 Command命令基础学习源码

    这个源码示例可能包含了创建和使用ICommand的基本示例,包括定义自定义命令、设置数据上下文、绑定命令到UI元素以及实现INotifyPropertyChanged接口以通知数据变化。通过查看和运行这个示例,你可以更好地理解WPF中...

    WPF编程宝典——C# 2010版源码

    **WPF编程宝典——C# 2010版源码详解** Windows Presentation Foundation (WPF) 是Microsoft .NET Framework的重要组成部分,它为开发者提供了丰富的用户界面开发工具和技术。在C# 2010版中,WPF进一步提升了其功能...

    WPF编程宝典——C#+2010版 书籍配套源码

    《WPF编程宝典——C#+2010版 书籍配套源码》是一份针对Windows Presentation Foundation(WPF)的编程资源,旨在帮助开发者深入理解并熟练掌握使用C# 2010进行WPF应用开发。WPF是.NET Framework的一部分,提供了丰富...

    WPF编程宝典——使用C# 2012和.NET 4.5(第4版)源码

    4. **Chapter05**:可能涉及控件、事件和命令,这是WPF应用的基础,包括如何自定义控件、响应用户输入以及实现命令逻辑。 5. **Chapter03**:可能介绍XAML语言,它是WPF的主要标记语言,用于声明性地定义用户界面。...

    WPF编程宝典——使用C# 2012和.NET 4.5

    此外,可能还会涉及命令、事件和路由事件,这些都是WPF中处理用户输入和应用逻辑的关键。 **第五章:资源、样式和模板** 资源是WPF中复用UI元素和设置的关键,可以显著提高代码的可维护性。样式定义了控件的默认...

    WPF编程宝典——使用C# 2012和.NET 4.5(第4版) 中文部分章节

    **WPF编程宝典——使用C# 2012和.NET 4.5(第4版)** 是一本深入探讨Windows Presentation Foundation (WPF)技术的权威书籍,旨在帮助读者掌握利用C# 2012和.NET Framework 4.5进行高效UI开发的关键技能。...

    WPF编程宝典:使用C# 2012和.NET 4.5 第4版 PDF与源码

    《WPF编程宝典:使用C# 2012和.NET 4.5 第4版》是一本全面深入探讨Windows Presentation Foundation (WPF) 的技术书籍,它以C# 2012和.NET Framework 4.5为开发语言和平台。这本书详细介绍了如何利用WPF创建现代化、...

    wpf实例源码9-10

    描述同样简洁,直接表明了内容的性质——WPF的实践代码。这可能包含了一系列功能各异的程序,旨在帮助开发者理解和学习如何在实际项目中运用WPF技术。 **标签分析** 标签"WPF"是关键词,代表了这些源代码是围绕WPF...

    wpf telerik tab替换为回车,用户回车时,进入下一个可编辑格,而不是下一行

    1. **初始化自定义命令提供程序**: - `this.gvList.KeyboardCommandProvider = new CustomKeyboardCommandProvider(this.gvList);` - 这行代码将GridViewDataControl的键盘命令提供程序设置为我们自定义的`...

    Adam Nathan名著 《WPF 揭秘》

    通过上下两卷的PDF文档——"WPF揭秘1.pdf"和"WPF揭秘2.pdf",你可以系统地学习并查阅关于WPF的详尽资料。这两份电子版资源对于那些无法获取纸质版的读者来说,无疑是极其珍贵的学习材料,可以帮助你充分理解和运用...

    WPF一款自动整理XAML代码的插件

    为了帮助开发者解决这个问题,出现了专门的插件——“WPF一款自动整理XAML代码的插件”。这款插件致力于自动化XAML代码的格式化和整理,提升开发效率,保持代码的一致性和可读性。 该插件的核心功能在于它的代码...

    WPF宝典NETFramework版本

    本资料《WPF编程宝典——使用C# 2012和.NET 4.5(第4版)》将深入介绍WPF的基础知识和应用技巧,是WPF新手的理想入门读物。 1. **XAML语言基础** XAML(Extensible Application Markup Language)是WPF的核心,...

    wpf培训资料

    在这个“wpf培训资料”中,我们有机会深入学习WPF的核心概念和技术,通过具体的项目——NorthwindTradeApplication,来实践和理解WPF的应用。 首先,让我们了解**WPF的基本架构**。WPF基于XAML(Extensible ...

    WPF版天气预报源码 Modern风格 SweetWeather

    Vito.Csharp.Wpf.Controls文件夹则可能包含了一些自定义的WPF控件,这在创建Modern风格的界面时非常常见。开发者可能在这里实现了诸如滑动面板、动态图标等特定UI元素,以提供更加生动和直观的用户体验。 在技术...

    WPF编程宝典--使用C#2012和.NET4.5源码.rar

    **WPF编程宝典——使用C#2012和.NET4.5源码** Windows Presentation Foundation(WPF)是Microsoft开发的一种用户界面框架,它为构建桌面应用程序提供了丰富的功能和设计灵活性。在《WPF编程宝典》一书中,作者深入...

Global site tag (gtag.js) - Google Analytics