示例:WPF实现ApplicationCommands.Delete的TextBox
原文:示例: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}"/>
示例:WPF实现ApplicationCommands.Delete的TextBox的更多相关文章
- WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展
一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要是对文本 ...
- 【转】WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展
一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要是对文本输入控件进行样式开发,及相关扩展功能开发,主要内容包括: 基本文 ...
- WPF 实现带标题的TextBox
这篇博客将分享在WPF中如何创建一个带Title的TextBox.首先请看一下最终的效果, 实现思路:使用TextBlock+TextBox来实现,TextBlock用来显示Title. 实现代码, ...
- WPF自定义控件(二)——TextBox
和之前一样,先来看看效果: 这个TextBox可设置水印,可设置必填和正则表达式验证. 验证?没错,就是验证! 就是在输入完成后,控件一旦失去焦点就会自动验证!会根据我开放出来的“是否可以为空”属性进 ...
- WPF DataGrid列设置为TextBox控件的相关绑定
在wpf的DataGrid控件中,某一列的数据模板为TextBox控件的话,绑定Text="{Binding TxtSn, UpdateSourceTrigger=PropertyChang ...
- 基于WPF系统框架设计(7)-TextBox/PasswordBox在ViewModel中支持回车命令
应用场景 我现在做一个系统登录功能,要求在PasswordBox上输完密码后回车,能够响应Enter事件,并执行ViewModel中对应的方法.如果登录成功则隐藏当前窗口显示主窗体,登录失败则焦点返回 ...
- WPF中Popup上的textbox无法切换到中文输入法
As Marco Zhou has said in the msdn forum (http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b ...
- 【求助】WPF 在XP下 有的Textbox光标会消失
最近做个项目,一直有一个问题没有解决,就是在XP下,有的Textbox里在文本框里没有东西的时候,会没有光标.不同的XP机器,失去光标的Textbox也不一样. 各位大师看下面的三张图,当Textbo ...
- [WPF系列]-高级部分 Shadowed TextBox
Download Solution ShadowedTextBoxExample.zip (70.3 KB) Usage <local:ShadowedTextBox Label="F ...
随机推荐
- 压缩,解压缩 和tar详细介绍
文件压缩/解压缩 gzip bzip2 xz 只能压缩文件,不能压缩文件夹(压缩完后,文件会消失) 先建三个文件来进行演示 touch ./{1..3}.txt 文件已经创建好,下面就开始介 ...
- <人人都懂设计模式>-中介模式
真正的用房屋中介来作例子, 好的书籍总是让人记忆深刻. class HouseInfo: def __init__(self, area, price, has_window, has_bathroo ...
- CodeForces 407E: k-d-sequence
题目传送门:CF407E. 题意简述: 给定非负整数 \(k,d\) 和一个长度为 \(n\)(\(1\le n\le 2\times 10^5\))的整数序列 \(a\). 求这个序列中最长的一个连 ...
- WPF 用户控件的自定义依赖属性在 MVVM 模式下的使用备忘
依赖属性相当于扩充了 WPF 标签的原有属性列表,并可以使用 WPF 的绑定功能,可谓是十分方便的:用户控件则相当于代码重用的一种方式:以上几点分开来还是比较好理解的,不过要用到MVVM 模式中,还是 ...
- Mybatis-plus中不列出全部字段
//不列出全部字段 @Test public void test10() { QueryWrapper<User> wrapper = new QueryWrapper<>() ...
- android 判断是否真正连接到internet(通过检测网址,需要时间)
if (InetAddress.getByName("www.xy.com").isReachable(timeout)) { } else { }
- react使用ant design pro时的滑动图片组件
react的滑动图片验证,是基于https://segmentfault.com/a/1190000018309458?utm_source=tag-newest做的修改,改动的主要有以下几点: 1. ...
- 第二章python中的一切皆对象
1.函数和类也是对象,属于python的一等公民 赋值给一个变量 可以添加到集合对象之中 可以作为参数传递给函数 可以当作函数的返回值 def ask(name="ask_wzh" ...
- css如何让父元素下的所有子元素高度相同
小颖最近做的项目中要实现一个样式 ,小颖怕自己忘记了,写个随笔记下来 需求父元素下有多个子元素,并且子元素过多时要实现自动换行,给每个子元素都加了右边框,而每个子元素里的内容多少不一定,这就会产生右边 ...
- 常见的概率分布类型(二)(Probability Distribution II)
以下是几种常见的离散型概率分布和连续型概率分布类型: 伯努利分布(Bernoulli Distribution):常称为0-1分布,即它的随机变量只取值0或者1. 伯努利试验是单次随机试验,只有&qu ...