WPF自定义命令和处发命令
接实现ICommand接口的命令。在介绍之前,先看一下ICommand接口的原型:
- event EventHandler CanExecuteChanged;
- bool CanExecute(object parameter);
- void Execute(object parameter);
其中第一个事件为,当命令可执行状态发生改变时,可以激化此事件来通知其他对象。另外两个方法在上面已经用过同名的,在此不做重复说明。下面开始实现一个自定义直接实现ICommand接口的命令,同样实现点击源控件,清除目标控件的内容:
1 //为了使目标控件,含有Clear()方法,所以在此一个定义接口 2 public interface IView 3 { 4 void Clear(); 5 } 6 7 //定义命令 8 public class ClearCommand : ICommand 9 { 10 public event EventHandler CanExecuteChanged; 11 12 public bool CanExecute(object parameter) 13 { 14 throw new System.NotImplementedException(); 15 } 16 17 public void Execute(object parameter) 18 { 19 IView view = parameter as IView; 20 if (view != null) 21 { 22 view.Clear(); 23 } 24 } 25 } 26 27 //自定义命令源 28 public class MyCommandSource : System.Windows.Controls.UserControl, ICommandSource 29 { 30 public ICommand Command { get; set; } 31 32 public object CommandParameter { get; set; } 33 34 public IInputElement CommandTarget { get; set; } 35 36 //重写点击处理函数,注意由于事件的优先级不同,如果命令源是button的话,下面的函数不起作用 37 protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) 38 { 39 base.OnMouseLeftButtonDown(e); 40 41 if (this.CommandTarget != null) 42 { 43 this.Command.Execute(this.CommandTarget); 44 } 45 } 46 }
以上只是个人想法和实践经验所得,如果有文字错误和语法错误,请加以指点!
QQ:247039968
emil:wujc@younger.com
无论是美女的歌声,还是鬣狗的狂吠,无论是鳄鱼的眼泪,还是恶狼的嚎叫,都不会使我动摇