using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WpfCommand { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); InitializeCommand(); } // 声明命令 private RoutedCommand clearCmd = new RoutedCommand("Clear", typeof(MainWindow)); private void InitializeCommand() { // 命令源 this.btn.Command = clearCmd; this.clearCmd.InputGestures.Add(new KeyGesture(Key.C,ModifierKeys.Alt)); // 命令目标 this.btn.CommandTarget = this.txt; // 命令绑定 CommandBinding cb = new CommandBinding(); cb.Command = this.clearCmd; cb.CanExecute += new CanExecuteRoutedEventHandler(cb_CanExecute); cb.Executed += new ExecutedRoutedEventHandler(cb_Execute); // 安置到外围控件上 this.stackpanel.CommandBindings.Add(cb); } private void cb_CanExecute(object sender, CanExecuteRoutedEventArgs args) { if (string.IsNullOrEmpty(this.txt.Text)) { args.CanExecute = false; } else { args.CanExecute = true; } args.Handled = true; } private void cb_Execute(object sender, ExecutedRoutedEventArgs args) { this.txt.Clear(); args.Handled = true; } } }
-----------------------------------------------------------
优化代码段
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WpfCommand { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); InitializeCommand(); } // 声明命令 private RoutedCommand clearCmd = new RoutedCommand("Clear", typeof(MainWindow)); private void InitializeCommand() { // 命令源 this.btn.Command = clearCmd; this.clearCmd.InputGestures.Add(new KeyGesture(Key.C, ModifierKeys.Alt)); //// 命令目标 //this.btn.CommandTarget = this.txt; //// 命令绑定 //CommandBinding cb = new CommandBinding(); //cb.Command = this.clearCmd; //cb.CanExecute += new CanExecuteRoutedEventHandler(cb_CanExecute); //cb.Executed += new ExecutedRoutedEventHandler(cb_Execute); // 安置到外围控件上 this.CommandBindings.Add(new CommandBinding(clearCmd,cb_Execute,cb_CanExecute)); } private void cb_CanExecute(object sender, CanExecuteRoutedEventArgs args) { if (string.IsNullOrEmpty(this.txt.Text)) { args.CanExecute = false; } else { args.CanExecute = true; } args.Handled = true; } private void cb_Execute(object sender, ExecutedRoutedEventArgs args) { this.txt.Clear(); args.Handled = true; } } }