通过调度程序计时器禁用命令源的示例

更新:2007 年 11 月

此示例演示如何通过 DispatcherTimer 启用和禁用命令源。

诸如 MenuItem 类和 Button 类等命令源侦听它们附加到的 RoutedCommand 上的 CanExecuteChanged 事件,以便确定它们何时需要查询命令,以了解是否可以对当前命令目标执行该命令。如果命令无法执行,命令源通常会禁用自身;如果命令可以执行,则启用它们自身。例如,当命令无法执行时,MenuItem 会显示为灰色。

CommandManager 通过 RequerySuggested 事件通知 RoutedCommand 命令目标的条件已经改变。RoutedCommand 会引发命令源所侦听的 CanExecuteChanged 事件。通常,这一通知机制足以满足需要。但在某些情况下,CommandManager 不知道命令目标上的条件已经改变,因而永远不会引发 RequerySuggested 事件,并且命令源永远不会查询 RoutedCommand。在这些情况下,可以通过调用 InvalidateRequerySuggested 强制 CommandManager 引发 RequerySuggested 事件。

此示例创建了一个 RoutedCommand,它只能在当前时间的秒数大于目标值时执行。另外,此示例还创建了一个 DispatcherTimer,它每秒钟都会调用 InvalidateRequerySuggested。这可以确保命令源能够收到 CanExecuteChanged 事件,从而可以对该命令调用 CanExecute 方法。

有关此示例的另一种变体,请参见通过系统计时器禁用命令源的示例示例。有关命令的更多信息,请参见命令概述

此示例演示 Windows Presentation Foundation 的特定功能,因此未遵循应用程序开发的最佳做法。有关 Windows Presentation Foundation (WPF) 和 Microsoft .NET Framework 应用程序开发的最佳做法的全面介绍,请相应地参考以下主题:

辅助功能 - 辅助功能最佳方案

安全 - Windows Presentation Foundation 安全性

本地化 - WPF 全球化和本地化概述

Download sample

生成示例

  • 安装 Windows 软件开发工具包 (SDK) 并打开其生成环境命令窗口。在“开始”菜单上,指向“所有程序”、“Microsoft Windows SDK”,然后单击“CMD Shell”。

  • 将示例(通常位于软件开发工具包 (SDK) 文档中)下载到您的硬盘。

  • 若要从生成环境命令窗口生成示例,请转到示例的源目录。在命令提示符处,键入 MSBUILD。

  • 若要在 Microsoft Visual Studio 中生成示例,请加载示例解决方案或项目文件,然后按 Ctrl+Shift+B。

运行示例

  • 若要从生成环境命令窗口运行已编译的示例,请执行示例源代码文件夹下包含的 Bin\Debug 或 Bin\Release 文件夹中的 .exe 文件。

  • 若要在 Visual Studio 中调试运行已编译的示例,请按 F5。

请参见

任务

通过系统计时器禁用命令源的示例

概念

命令概述