4.提升-清新感受
4.1 巧妙禁用系统命令
前台代码
<Grid>
<TextBox Name="txt">
</TextBox>
</Grid>
先看后台代码
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 using System.Windows;
5 using System.Windows.Controls;
6 using System.Windows.Data;
7 using System.Windows.Documents;
8 using System.Windows.Input;
9 using System.Windows.Media;
10 using System.Windows.Media.Imaging;
11 using System.Windows.Shapes;
12
13 namespace Commands
14 {
15 /// <summary>
16 /// Interaction logic for NoCommandTextBox.xaml
17 /// </summary>
18
19 public partial class NoCommandTextBox : System.Windows.Window
20 {
21
22 public NoCommandTextBox()
23 {
24 InitializeComponent();
25 txt.CommandBindings.Add(new CommandBinding(ApplicationCommands.Cut, null, SuppressCommand));
26 txt.InputBindings.Add(new KeyBinding(ApplicationCommands.NotACommand, Key.C, ModifierKeys.Control));
27 txt.ContextMenu = null;
28 }
29 private void SuppressCommand(object sender, CanExecuteRoutedEventArgs e)
30 {
31 e.CanExecute = false;
32 e.Handled = true;
33 }
34 }
35 }
如果前面几章看懂了,这里可能就不用我解释了。 备注:文本框中的添加一个命令绑定,什么呢?就是 系统自带的剪切(Ctrl+X),将它的方法效果置空,SuppressCommand是个CanExecute方法,就是在执行方法之前的做个准备 那个方法
e.CanExecute = false; e.Handled = true;
第一句是不执行命令中的方法,后面一个是防止 事件冒泡 这就关于事件那一章了,具体讲解一下吧
ABC分别表示一个容器或者其他的,D代表文本框,假如现在D有个KeyDown事件,ABC也都有1个键盘事件。
此时如果不加 e.Handled = true 该事件就会检测C有没有KeyDown事件,如果有,C的KeyDown事件也会触发,同理文本框以上的所有父元素都会触发一次。加了 e.Handled = true,文本框的父元素同类型的事件就不会触发了,提高了效率,大家知道冒泡,泡是从水底往水面上冒的,可以理解为从下往上,对了,那有没有从上往下的,有啊,如果出现了这种事件,那就是 隧道事件 了,这里我就不说了。
txt.ContextMenu = null;
就是将文本框的右键菜单设为空
那么此例子就是实现禁止剪切文本框的内容。
Ok,不说了。
潜移默化学会WPF--Command(命令)学习(四) - AYUI框架 - 博客园
原文:https://www.cnblogs.com/lonelyxmas/p/10459061.html