【问题标题】:XAML minimize/maximize/close buttons through SystemCommandsXAML 通过 SystemCommands 最小化/最大化/关闭按钮
【发布时间】:2017-05-26 04:54:18
【问题描述】:

有一个名为 SystemCommands 的 WPF 类。我已经看到在按钮上使用这些命令来执行最大化、最小化和关闭等常见窗口任务的示例。

我发现的一个例子看起来像这样(简化):

<Window x:Name="MainWindow">
    <Grid>
        <Button Content="Close"
                Command="{x:Static SystemCommands.CloseWindowCommand}"
                CommandParameter="{Binding ElementName=MainWindow}" />
    </Grid>
</Window>

当我启动应用程序时,按钮被禁用,我无法单击它。更改 IsEnabled 属性无效。

我设法让按钮启用一次,但我现在无法重现它。无论如何,当它启用时,我点击它时什么也没发生。

我必须做什么才能启用此按钮并实际关闭窗口(或最小化/最大化)?如果可能的话,我真的希望它是一个仅限 XAML 的解决方案。

【问题讨论】:

    标签: wpf xaml


    【解决方案1】:

    这些只是预定义的 RoutedCommand(s),没有任何实现。您必须自己提供实现。

    https://msdn.microsoft.com/en-us/library/system.windows.systemcommands

    SystemCommands 类中的命令代表一组常见的 管理窗口的命令。此类中的属性表示 RoutedCommand 对象,不提供实现逻辑 命令。您可以通过绑定来提供命令的逻辑 带有 CommandBinding 的命令。或者,SystemCommands 类提供了实现指定窗口逻辑的静态方法。您可以将静态方法传递给实现 ICommand 并接受委托的类型。有关详细信息,请参阅 InputBinding 类中的示例。

    【讨论】:

    • 我明白了。不过,这让我很好奇。如果您无论如何都必须提供自己的实现,那么这些命令的意义何在? SystemCommands 有哪些常规按钮单击事件处理程序没有的优势?
    • RoutedCommand 是 WPF 完全 MVVM 之前的保留。在 MVVM 模式中,您将使用自己的 ICommand 实现。这样做的好处是命令代码存在于视图模型中,而不是视图中。 RoutedCommand 确实 有一个好处。您可以从任何支持它的地方提出一个,但可以通过 CommandBinding 在可视化树中的任何位置处理它。
    • 这将允许您在具有自己的“保存”按钮的窗口上拥有任意数量的用户控件。然后,您可以在窗口级别捕获该命令,因为 RoutedCommand 会像事件一样在可视树中冒泡。这使您可以在一个地方拥有保存逻辑,但可以从任何地方“提升”,
    • 感谢您的精彩解释。不幸的是,我似乎走错了路:(
    • @GTHvidsten,我想,重点是为常用命令提供成员。一种“不要重复自己”:)
    猜你喜欢
    • 2016-03-04
    • 2011-03-13
    • 2016-10-04
    • 2013-10-10
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    相关资源
    最近更新 更多