示例:WPF实现ApplicationCommands.Delete的TextBox

目的:通过模仿TextBox中Ctrl+C等快捷键原理来了解CommandBindings实现原理,可以通过此示例了解ApplicationCommands.Copy在TextBox中实现的原理

一、定义一个自己的MyCommands.Delete

 class MyCommands
    {
        public static RoutedUICommand DeleteCommand = new RoutedUICommand();
    }

二、定义一个TextBoxControl控件来封装TextBox并包含Ctrl+D删除文本内容

XAML部分:

    <UserControl.InputBindings>
        <KeyBinding Command="local:MyCommands.DeleteCommand" Key="D" Modifiers="Ctrl"/>
    </UserControl.InputBindings>
    <Grid>
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="按住Ctrl+D删除文件内容" Width="200"/>
            <TextBox x:Name="tb_content" Text="请输入文本" Width="200"/>
        </StackPanel>
    </Grid>

CS部分:

private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            this.tb_content.Text = string.Empty;
        }

        private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
        {
            e.CanExecute = !string.IsNullOrEmpty(this.tb_content.Text);
        }

此时的TextBoxControl即可实现Ctrl+D删除文本中内容

三、同AppliactionCommands一样,MyCommands也可以在外部调用并动态更新控件IsEnbled

   定义一个MainWindow放置TextBoxControl并定义按钮绑定自定义的MyCommand.DeleteCommand和系统中ApplicationCommands.Copy

 <Grid>
        <StackPanel  HorizontalAlignment="Center" VerticalAlignment="Center">
            <Menu>
                <MenuItem Header="删除"  Command="local:MyCommands.DeleteCommand"/>
                <MenuItem Header="剪切"  Command="ApplicationCommands.Copy"/>
            </Menu>
            <local:TextBoxControl x:Name="tb"/>

            <ToolBar>
                <Button Content="删除"  Command="local:MyCommands.DeleteCommand"/>
                <Button Content="剪切" Command="ApplicationCommands.Copy"/>
            </ToolBar>
        </StackPanel>
    </Grid>

通过示例可以看到自定义的MyCommands和ApplicationCommands中效果一致

效果如下:(剪切实际上是复制,不必多想,很单纯的文本写错了)

值得注意的需要通过1、menu item 2、toolbar 3、shortcut中使用

如果要用Button等其他控件需要设置CommandTarget

            <Button Content="删除"  Command="local:MyCommands.DeleteCommand" CommandTarget="{Binding ElementName=tb}"/>

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值