科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件在WPF中自定义控件 UserControl

在WPF中自定义控件 UserControl

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在这里我们将通过打造一个UserControl(用户控件)来逐步讲解如何在WPF中自定义控件,并将WPF的一些新特性引入到自定义控件中来.

作者:周银辉 来源:周银辉的博客 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来实现的,其将命令与命令的快捷键关联起来,比如:

以下是引用片段:
   InputBinding inputBinding = new InputBinding(SpeakCommand, new MouseGesture(MouseAction.LeftClick));

   CommandManager.RegisterClassInputBinding(typeof(ClockUserCtrl), inputBinding);

  这样,当我们鼠标点击控件时就会引发控件的Speak命令,从而调用SpeakTheTime函数进行语音播报.

  快捷键可以通过MouseGesture或KeyGesture来定义.

  4,优点与缺点:

  正如在在WPF中自定义控件(1) 中谈到的一样,UserControl能比较快速的打造自定义控件,但其对模板样式等缺乏很好的支持,打造出来的控件不如WPF内置控件一样灵活,在本系列随笔的下一篇中,我们将介绍如何打造能对WPF新特性提供完全支持的CustomControl.

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章