原文:示例:WPF实现ApplicationCommands.Delete的TextBox

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

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


  1. class MyCommands
  2. {
  3. public static RoutedUICommand DeleteCommand = new RoutedUICommand();
  4. }

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

XAML部分:


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

CS部分:


  1. private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
  2. {
  3. this.tb_content.Text = string.Empty;
  4. }
  5. private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
  6. {
  7. e.CanExecute = !string.IsNullOrEmpty(this.tb_content.Text);
  8. }

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

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

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


  1. <Grid>
  2. <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
  3. <Menu>
  4. <MenuItem Header="删除" Command="local:MyCommands.DeleteCommand"/>
  5. <MenuItem Header="剪切" Command="ApplicationCommands.Copy"/>
  6. </Menu>
  7. <local:TextBoxControl x:Name="tb"/>
  8. <ToolBar>
  9. <Button Content="删除" Command="local:MyCommands.DeleteCommand"/>
  10. <Button Content="剪切" Command="ApplicationCommands.Copy"/>
  11. </ToolBar>
  12. </StackPanel>
  13. </Grid>

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

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

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

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

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

示例:WPF实现ApplicationCommands.Delete的TextBox的更多相关文章

  1. WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展

    一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要是对文本 ...

  2. 【转】WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展

    一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要是对文本输入控件进行样式开发,及相关扩展功能开发,主要内容包括: 基本文 ...

  3. WPF 实现带标题的TextBox

    这篇博客将分享在WPF中如何创建一个带Title的TextBox.首先请看一下最终的效果, 实现思路:使用TextBlock+TextBox来实现,TextBlock用来显示Title. 实现代码, ...

  4. WPF自定义控件(二)——TextBox

    和之前一样,先来看看效果: 这个TextBox可设置水印,可设置必填和正则表达式验证. 验证?没错,就是验证! 就是在输入完成后,控件一旦失去焦点就会自动验证!会根据我开放出来的“是否可以为空”属性进 ...

  5. WPF DataGrid列设置为TextBox控件的相关绑定

    在wpf的DataGrid控件中,某一列的数据模板为TextBox控件的话,绑定Text="{Binding TxtSn, UpdateSourceTrigger=PropertyChang ...

  6. 基于WPF系统框架设计(7)-TextBox/PasswordBox在ViewModel中支持回车命令

    应用场景 我现在做一个系统登录功能,要求在PasswordBox上输完密码后回车,能够响应Enter事件,并执行ViewModel中对应的方法.如果登录成功则隐藏当前窗口显示主窗体,登录失败则焦点返回 ...

  7. WPF中Popup上的textbox无法切换到中文输入法

    As Marco Zhou has said in the msdn forum (http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b ...

  8. 【求助】WPF 在XP下 有的Textbox光标会消失

    最近做个项目,一直有一个问题没有解决,就是在XP下,有的Textbox里在文本框里没有东西的时候,会没有光标.不同的XP机器,失去光标的Textbox也不一样. 各位大师看下面的三张图,当Textbo ...

  9. [WPF系列]-高级部分 Shadowed TextBox

    Download Solution ShadowedTextBoxExample.zip (70.3 KB) Usage <local:ShadowedTextBox Label="F ...

随机推荐

  1. CPU使用率与负载的爱恨情仇

    今天有一个电话面试,面试官问我:CentOS怎么查看CPU负载?我说:看top的第一行有load average.面试官又问:为什么从这就判定是负载高呢?依据是什么呢?然后... 然后我就尴尬了,挂了 ...

  2. Mysql数据库之备份还原(mysqldump,LVM快照,select备份,xtrabackup)

    备份类型: 热备份:读写不受影响 温备份:仅可执行读备份 冷备份:离线备份,读写均不能执行,关机备份 物理备份和逻辑备份 物理备份:复制数据文件,速度快. 逻辑备份:将数据导出之文本文件中,必要时候, ...

  3. construct2 入门

    construct2特点 construct2是一款跨平台二维游戏开发引擎,不需要编码,通过定义各个部件和事件完成html5的游戏开发.该引擎可以将开发的封装成多种形式,如phonegap.cocoo ...

  4. django 使用新的虚拟环境

    在原来环境中,项目根目录下,执行命令收集所有包 pip freeze > plist.txt 首先下载一个新虚拟环境,并且创建一个新的虚拟环境 sudo apt-get install pyth ...

  5. pansas 绘制定制的箱线图

    1  普通风格 代码 import numpy as np import pandas as pd import matplotlib.pyplot as plt plt.rcParams['font ...

  6. jupyter配置成coding神器

    参考链接: [1]http://resuly.me/2017/11/03/jupyter-config-for-windows/ [2]主题更换 切换主题:jt 主题名 -T 主题种类:chester ...

  7. apache在linux下安装

    yum安装 主流Linux系统版本基本上都集成了apache服务器httpd,我们可以通过如下命令来查看我们的操作系统上是否已经安装了apache服务器httpd rpm -qa | grep htt ...

  8. ActiveMQ消息可靠性-签收

    非事务模式下消费者签收 动签收就像快递到达时,快递寄送点给你签收了,不用你自己去签收,而手动签收就是必须我本人签收, 自动签收(默认为自动签收) 手动签收:能够避免消息的重复消费 当设置为手动签收时, ...

  9. USACO Hide and Seek

    洛谷 P2951 [USACO09OPEN]捉迷藏Hide and Seek 洛谷传送门 JDOJ 2641: USACO 2009 Open Silver 1.Hide and Seek JDOJ传 ...

  10. 【Linux】netstat命令

    https://www.cnblogs.com/ftl1012/p/netstat.html这个讲的不错 https://www.linuxprobe.com/netstat-common-metho ...