扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:周银辉 来源:周银辉的博客 2007年11月20日
关键字:
然后在控件的静态函数中定义一个命令绑定,该命令绑定定义了命令的具体细节:对应的命令是什么?其完成什么样的功能,当前环境下其能执行吗?
以下是引用片段: CommandBinding commandBinding = new CommandBinding(SpeakCommand, new ExecutedRoutedEventHandler(ExecuteSpeak), new CanExecuteRoutedEventHandler(CanExecuteSpeak)); private static void ExecuteSpeak(object sender, ExecutedRoutedEventArgs arg) { ClockUserCtrl clock = sender as ClockUserCtrl; if (clock != null) { clock.SpeakTheTime(); } } private static void CanExecuteSpeak(object sender, CanExecuteRoutedEventArgs arg) { ClockUserCtrl clock = sender as ClockUserCtrl; arg.CanExecute = (clock != null); } |
CanExecuteRoutedEventArgs的CanExecute属性用于指示当前命令是否可用,也就是说
new ExecutedRoutedEventHandler(ExecuteSpeak)委托指定了当该命令被执行时所要完成的任务,这通过回调ExcuteSpeak函数来实现.
以下是引用片段: private static void ExecuteSpeak(object sender, ExecutedRoutedEventArgs arg) { ClockUserCtrl clock = sender as ClockUserCtrl; if (clock != null) { clock.SpeakTheTime(); } } private void SpeakTheTime() { DateTime localTime = this.Time.ToLocalTime(); string textToSpeak = "现在时刻," + localTime.ToShortDateString() +","+ localTime.ToShortTimeString() + ",星期" + (int)localTime.DayOfWeek; this.speecher.SpeakAsync(textToSpeak); } |
我们也可以为命令添加快捷键,这是通过InputBinding来实现的,其将命令与命令的快捷键关联起来,比如:
以下是引用片段: CommandManager.RegisterClassInputBinding(typeof(ClockUserCtrl), inputBinding); |
这样,当我们鼠标点击控件时就会引发控件的Speak命令,从而调用SpeakTheTime函数进行语音播报.
快捷键可以通过MouseGesture或KeyGesture来定义.
4,优点与缺点:
正如在在WPF中自定义控件(1) 中谈到的一样,UserControl能比较快速的打造自定义控件,但其对模板样式等缺乏很好的支持,打造出来的控件不如WPF
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者