代码之家  ›  专栏  ›  技术社区  ›  Keith Hill

WPF命令基础结构中是否有关闭对话框的命令?

  •  4
  • Keith Hill  · 技术社区  · 14 年前

    ApplicationCommands.Close 用于关闭模式对话框,还是该命令被认为是用于关闭应用程序的保留命令?如果是后者,人们会创造吗 Close 每个的命令 Dialog 盒子还是一个 关闭 所有模态对话框的命令?

    3 回复  |  直到 10 年前
        1
  •  3
  •   Ray Burns    14 年前

    以下是WPF如何使用ApplicationCommand.Close:

    1. WPF本身没有用于的内置命令处理程序 ApplicationCommands.Close ,但是
    2. ApplicationCommand.Close 每当接收到Win32消息时,RoutedCommand WM_APPCOMMAND 具有 lParam=APPCOMMAND_CLOSE . 这意味着如果任何Win32应用程序向您发送 APPCOMMAND_CLOSE 应用程序命令。关闭 将调用处理程序。

    这个 documentation APPCOMMAND\u关闭 定义如下:

    关闭窗口(而不是应用程序)。

    应用程序命令。关闭 同样的方式,“窗口”将包含对话框(在Win32世界中通常是这样)。

    为什么您关心Win32文档中的内容?这在三种情况下可能很重要:

    1. 可达性场景
    2. 当用户配置了鼠标按键组合来发送“关闭窗口”命令时

    所以回答你的问题:不, 应用程序命令。关闭 保留用于关闭应用程序。它的目的是关闭窗口,包括一个对话框窗口。因此,不需要创建单独的命令来关闭对话框。

    ((Window)sender).Close() . 这是一个简单而优雅的解决方案。

        2
  •  3
  •   cod3monk3y Rodney Lambert    9 年前

    如果你只是想绑定一个按钮点击关闭一个对话框,你可以设置 IsCancel 按钮上的属性 as recommended in the docs :

    <Button IsCancel="True">Cancel</Button>
    

    false 结果。如果你想用一个 true

    <Button IsDefault="True" Click="acceptButton_Click">OK</Button>
    

    以及背后的代码:

    void acceptButton_Click(object sender, RoutedEventArgs e)
    {
        this.DialogResult = true;
    }
    

    关闭对话框并返回 是的 结果。

    因为这是视图代码(关闭一个窗口),所以在我严格的MVVM架构中,这种代码隐藏通常不会给我带来任何压力。YDMV公司。

        3
  •  1
  •   Tetsujin no Oni    9 年前

    关闭应用程序不同于关闭对话框。

    有一个用于取消对话框的内置命令。在您创建的任何窗口类的顶部都有一个大的红色“X”。当您点击“X”时,您将生成一个“DialogCancelCommand”,然后由Window类中的“OnDialogCancel”事件处理程序处理。但是,由于只有Redmond内部知道的原因,“DialogCancelCommand”是一个内部RoutedEvent。 我不能代表其他工程师说话,但我已经从反映的代码中复制了“DialogCancelCommand”,这样我就可以以内部命令执行相同操作的方式关闭对话框。

        /// <summary>
        /// Cancels a dialog.
        /// </summary>
        public static readonly RoutedCommand DialogCancelCommand = new RoutedCommand("DialogCancel", typeof(CoreCommands));