整理: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=& ...
随机推荐
- Linux shell 函数应用示例02
nginx服务控制脚本: 安装ngix [root@wei function]# yum install gcc pcre-devel openssl-devel [root@wei function ...
- Linux shell for循环结构
Linux Shell for循环结构 循环结构 1:循环开始条件 2:循环操作 3:循环终止的条件 shell语言 for,while ...
- 前端性能优化 http请求的过程及潜在的优化点
CS架构:比如我们的代码开发好,打包成apk,发布到平台,那么最终怎么运行到用户的手机上呢,用户首先需要从相关的应用商城下载这个apk包,并且运行这个 apk 包,那么这个 apk 包就会被解压,最后 ...
- 实时通讯之Socket.io
WebSocket WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术.使用WebSocket,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成 ...
- tf.variable_scope()和tf.name_scope()
1.tf.variable_scope 功能:tf.variable_scope可以让不同命名空间中的变量取相同的名字,无论tf.get_variable或者tf.Variable生成的变量 Tens ...
- 显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn到底是什么?
在使用深度学习框架的过程中一定会经常碰到这些东西,虽然anaconda有时会帮助我们自动地解决这些设置,但是有些特殊的库却还是需要我们手动配置环境,但是我对标题上的这些名词其实并不十分清楚,所以老是被 ...
- contact form 7如何搭配Akismet过滤垃圾邮件
contact form 7有很多站长在用,但是经常会有一些垃圾邮件进来,如何过滤呢?两个方法:1.表单提交启用验证码功能,很多垃圾邮件是用软件扫相应的端口,然后批量群发,如果用验证码了可以过滤很大一 ...
- 排序算法-希尔排序(Java)
package com.rao.sort; import java.util.Arrays; /** * @author Srao * @className ShellSort * @date 201 ...
- 将python项目.py文件打包成.exe文件
安装pyinstaller包 pip3 install pyinstaller 如果不行 pip3 install pyinstaller -i https://pypi.doubanio.com/s ...
- 如何计算假设检验的功效(power)和效应量(effect size)?
做完一个假设检验之后,如果结果具有统计显著性,那么还需要继续计算其效应量,如果结果不具有统计显著性,并且还需要继续进行决策的话,那么需要计算功效. 功效(power):正确拒绝原假设的概率,记作1-β ...