整理:WPF中CommandBindings的用法
目的:了解一下CommandBindings、InputBindings、ICommandSource中在WPF中扮演什么样的角色
CommandBindings:
将应用程序要执行的功能封装到中间层组件或独立的类中:可以将所有命令统一封装,统一管理,统一调用
定义过程:
-
//将所有命令封装在一个类里面
-
public class MyCommands
-
{
-
public static RoutedUICommand MyCommand = new RoutedUICommand();
-
-
public static void DoCommand()
-
{
-
MyCommand.Execute("erer",null);
-
}
-
-
}
说明:定义一个类用来存放所有Binding命令,定义一个MyCommand命令供页面使用
Xaml中注册定义的命令:
-
<!--第一步,将整个窗口要用到的命令注册-->
-
<UserControl.CommandBindings>
-
<CommandBinding Command="local:MyCommands.MyCommand"
-
Executed="CommandBinding_Executed"
-
CanExecute="CommandBinding_CanExecute"/>
-
-
<!--如果CanExecute返回false则注册该命令的所有控件是不可用的-->
-
</UserControl.CommandBindings>
Xaml中将命令赋值到需要调用该命令的ICommandSource对象
-
<Grid>
-
<StackPanel>
-
<Menu>
-
<!--实现了ICommandSource接口的控件都可以直接赋值到Command命令上-->
-
<MenuItem Command="local:MyCommands.MyCommand"
-
Header="menu"
-
CommandParameter="1111" />
-
</Menu>
-
<Button Command="local:MyCommands.MyCommand" Height="50" Content="执行命令"
-
CommandParameter="button"
-
Grid.Row="1"/>
-
-
<CheckBox Content="控制MyCommand是否可以执行" x:Name="cb" IsChecked="True"/>
-
-
-
<Button Content="外部触发命令" Click="Button_Click"/>
-
</StackPanel>
-
</Grid>
ICommandSource对象 Command="local:MyCommands.MyCommand" 赋值会触发注册的MyCommand命令
注意:
<CommandBinding Command="local:MyCommands.MyCommand"
Executed="CommandBinding_Executed"
CanExecute="CommandBinding_CanExecute"/>
Command只能传入静态的命令,并通过Executed、CanExecute注册要实现的事件,不可以{Binding }到ViewModel
KeyBinding:
可以直接注册快捷键、鼠标
-
<UserControl.InputBindings>
-
<KeyBinding Command="local:MyCommands.MyCommand" Key="T" Modifiers="Alt"/>
-
</UserControl.InputBindings>
说明:将快捷键Alt+T注册到命令local:MyCommands.MyCommand上,也可以对Command 执行{Binding}到ViewModel,本质上也是一个ICommandSource对象
也可以用在Xaml中这样写
-
<UserControl.Resources>
-
<RoutedUICommand x:Key="Cut" Text="剪切" />
-
<RoutedUICommand x:Key="Copy" Text="复制" />
-
<RoutedUICommand x:Key="Paste" Text="粘贴" />
-
<RoutedUICommand x:Key="Select" Text="全选" />
-
</UserControl.Resources>
-
<UserControl.InputBindings>
-
<KeyBinding Gesture="Ctrl+X" Command="{StaticResource Cut}" />
-
<KeyBinding Gesture="Ctrl+C" Command="{StaticResource Copy}" />
-
<KeyBinding Gesture="Ctrl+V" Command="{StaticResource Paste}" />
-
</UserControl.InputBindings>
-
<UserControl.CommandBindings>
-
<CommandBinding Command="{StaticResource Cut}" Executed="CommandBinding_Cut"></CommandBinding>
-
<CommandBinding Command="{StaticResource Copy}" Executed="CommandBinding_Copy"></CommandBinding>
-
<CommandBinding Command="{StaticResource Paste}" Executed="CommandBinding_Paste"></CommandBinding>
-
</UserControl.CommandBindings>
整理:WPF中CommandBindings的用法的更多相关文章
- 整理:WPF中XmlDataProvider的用法总结
原文:整理:WPF中XmlDataProvider的用法总结 一.目的:了解XmlDataProvider中绑定数据的方法 二.绑定方式主要有三种: 1.Xaml资源中内置: <!--XPath ...
- WPF中StringFormat的用法
原文:WPF中StringFormat的用法 WPF中StringFormat的用法可以参照C#中string.Format的用法 1. C#中用法: 格式化货币(跟系统的环境有关,中文系统默认格式化 ...
- WPF中StringFormat的用法--显示特定位数的数字
原文:WPF中StringFormat的用法--显示特定位数的数字 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/huangli321456/art ...
- WPF中log4net的用法
WPF中如何使用log4nethttp://www.cnblogs.com/C-Sharp2/archive/2013/04/12/WPF-LOG4NET.html Apache log4net Ma ...
- wpf中INotifyPropertyChanged的用法
using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using Sy ...
- 整理:WPF中Binding的几种写法
原文:整理:WPF中Binding的几种写法 目的:整理WPF中Bind的写法 <!--绑定到DataContext--> <Button Content="{Bindin ...
- 在 WPF 中的线程
线程处理使程序能够执行并发处理,以便它可以做多个操作一次.节省开发人员从线程处理困难的方式,设计了 WPF (窗口演示文稿基金会).这篇文章可以帮助理解线程在 WPF 中的正确用法. WPF 内部线程 ...
- WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化
WPF中的常用布局 一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...
- WPF中StringFormat 格式化 的用法
原文 WPF中StringFormat 格式化 的用法 网格用法 <my:DataGridTextColumn x:Name="PerformedDate" Header=& ...
随机推荐
- OEL7.6源码安装MYSQL5.7
首先官网下载安装包https://dev.mysql.com/downloads/mysql/5.7.html#downloads 然后上传解压至/usr/local目录 [root@localhos ...
- Memcache内存缓存框架
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10923221.html 一:Memcache是什么,为什么要用它 MemCache是一个高性能.“分布式”的 ...
- ACM模板(转载)
转载自:https://blog.csdn.net/f_zyj/article/details/51594851 创建自:https://blog.csdn.net/ZDL_0908/article/ ...
- SpringBoot中使用Maven插件,上传docker镜像
开启docker远程端口 我上一篇里面写了,这里暴露的路径: 18.16.202.95:2375 简单构建 配置pom.xml文件 在properties中增加一行指定远程主机的位置 <prop ...
- offsetHeight在不同的浏览器下取值不同
今天在调js的时候,发现firefox和IE在取document.body.offsetHeight的值的时候结果不一样.上网查了一下,发现如下结果: 这四种浏览器分别为IE(Internet E ...
- reduce方法和reduceRight方法
什么是reduce方法? 先来看一下用用法: var arr = [1, 2, 3, 4] var sum = (a, b) => a + b arr.reduce(sum, 0) 由上面代码可 ...
- C++中静态成员变量要在类外部再定义或初始化的原因
C++中静态成员变量要在类外部再定义或初始化,否则会产生错误. class A { public: static int a; }; int A::a=0; 为什么要在类的外部进行定义的原因: 1. ...
- FFT学习
看了一天的多项式的内容,看博客的时候好像还是那么回事,一看题,哇塞,发现我其实连卷积是啥都没看懂. qtdydb,背板子. 不知道卷积是啥就很伤了. P3803 [模板]多项式乘法(FFT) #inc ...
- CSS基础以及兼容IE方法
1 介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的? 标准盒子模型:宽度=内容的宽度(content)+ border + padding + margin低版本IE盒子模型:宽度 ...
- Salesforce 开发整理(四)记录锁定
如果一个对象的记录在满足某个条件的情况下,希望能对其进行锁定,即普通用户没有权限对其进行编辑操作,记录页面显示如下图 一般会在提交审批,或者项目进行到某个阶段的情况下,由后台进行判断要不要锁定记录,或 ...