RoutedUICommand,CommandBindings,InputBindings,ICommand接口的概念及快捷键或鼠标触发Command命令

如题,这篇贴子来简单介绍一下这4个知识点。
1、RoutedUICommand 类
官方解释:定义一个在元素树中路由并包含一个文本属性的 ICommand。我们看看它的继承路线:
ICommand -> RoutedCommand -> RoutedUICommand,也就是说,本质上,它就是ICommand接口的子类实现。如要在XAML中使用它,如下进行实例化。

<Window.Resources>
<RoutedUICommand x:Key="OpenCommand" Text="Open"/>
</Window.Resources>

2.CommandBindings集合
定义好了RoutedUICommand 的实例后,还需要写这个命令的执行代码,于是CommandBindings就出场了。CommandBindings是一个集合,位于window对象中,这个集合中存储了RoutedUICommand的执行代码的实现,也就是每个具体的CommandBinding对象,CommandBinding对象在实例化时需要三个参数,即command命令的实例对象,Executed执行委托和CanExecute判断委托。说白了,CommandBinding就是一个中间商,它生下来就是为RoutedUICommand服务的,它指明了RoutedUICommand要执行的代码,当然这些代码就是程序员去实现了,所以定义(实例化)CommandBinding的实例就要分为两步,第一步在xaml中实例化,第二步实现Executed委托和CanExecute委托
2.1 实例化CommandBinding

<Window.CommandBindings>
<CommandBinding Command="{StaticResource OpenCommand}"
                Executed="CommandBinding_Executed"
                CanExecute="CommandBinding_CanExecute"/>
</Window.CommandBindings>

2.2实现Executed委托和CanExecute委托
上面引用了CommandBinding_Executed函数和CommandBinding_CanExecute函数,所以要在后端写上这两个函数的回调,这样,将来OpenCommand被执行的时候,才会真正的去执行CommandBinding_Executed函数里面的代码

private void CommandBinding_Executed(object sender,ExecutedRoutedEventArgs e){
	MessageBox.Show("我是ALT+S");
}
private void CommandBinding_Executed(object sender,CanExecuteRoutedEventArgs e){
	e.CanExecute = true;
}

3、InputBindings类
可以看到这个InputBindings以s结尾,说明它是一个集合,位于window这个类型中。它的元素都是InputBinding类,例如KeyBinding类型或MouseBinding,它们都继承于InputBinding类。

经过第1步和2步,也就是定义好了一个command和command的执行代码后,接下来就是要使用这个command,KeyBinding可以让用户通过快捷键去触发(或叫引用)这个command,而MouseBinding可以用鼠标的操作去触发这个command。


<Window.InputBindings>
<!--鼠标+ctrl键触发command-->
<MouseBinding Gesture="Control+WheelClick" Command="{StaticResource OpenCommand}"/>
<!--快捷键触发command-->
<KeyBinding Gesture="Alt+S" Command="{StaticResource OpenCommand}"/>
</Window.InputBindings>

如此,按下ctrl键+鼠标滚轮或alt+s都可以触发OpenCommand命令,而最终的效果就是执行了CommandBinding_Executed回调函数,弹出MessageBox.Show(“我是ALT+S”);

你可能感兴趣的:(wpf,RoutedUICommand,CommandBindings,InputBindings,ICommand)