整理:WPF中CommandBindings的用法

48 篇文章 11 订阅

目的:了解一下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>

  ## 更多学习官方文档
System.Windows.Controls 命名空间 | Microsoft Learn
## 更多查看官方在线源码
https://referencesource.microsoft.com/?wt.mc_id=MVP_380318 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值