通过调度程序计时器禁用命令源的示例
更新: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 全球化和本地化概述
生成示例
安装 Windows 软件开发工具包 (SDK) 并打开其生成环境命令窗口。在“开始”菜单上,指向“所有程序”、“Microsoft Windows SDK”,然后单击“CMD Shell”。
将示例(通常位于软件开发工具包 (SDK) 文档中)下载到您的硬盘。
若要从生成环境命令窗口生成示例,请转到示例的源目录。在命令提示符处,键入 MSBUILD。
若要在 Microsoft Visual Studio 中生成示例,请加载示例解决方案或项目文件,然后按 Ctrl+Shift+B。
运行示例
若要从生成环境命令窗口运行已编译的示例,请执行示例源代码文件夹下包含的 Bin\Debug 或 Bin\Release 文件夹中的 .exe 文件。
若要在 Visual Studio 中调试运行已编译的示例,请按 F5。