Wpf XAML通过系统命令最小化/最大化/关闭按钮

Wpf XAML通过系统命令最小化/最大化/关闭按钮,wpf,xaml,Wpf,Xaml,有一个名为SystemCommands的WPF类。我在按钮上看到了这些命令的示例,它们用于执行常见的窗口任务,如最大化、最小化和关闭 我发现的一个示例如下(简化): 当我启动应用程序时,按钮被禁用,我无法单击它。更改IsEnabled属性无效 我设法使按钮启用了一次,但现在无法复制它。在任何情况下,当它被启用时,当我单击它时,什么也没有发生 要启用此按钮并实际关闭窗口(或最小化/最大化),我必须做什么?如果可能的话,我真的希望它是一个仅限XAML的解决方案。这些只是预定义的RoutedCom

有一个名为
SystemCommands
的WPF类。我在按钮上看到了这些命令的示例,它们用于执行常见的窗口任务,如最大化、最小化和关闭

我发现的一个示例如下(简化):


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

我设法使按钮启用了一次,但现在无法复制它。在任何情况下,当它被启用时,当我单击它时,什么也没有发生


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

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

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


我懂了。不过,这让我很好奇。如果您必须提供自己的实现,这些命令有什么意义?SystemCommands有什么常规按钮单击事件处理程序没有的优势?
RoutedCommand
是WPF完全使用MVVM之前的一点延迟。在MVVM模式中,您将使用自己的
ICommand
实现。这样做的好处是命令代码位于viewmodel中,而不是视图中<代码>路由命令有一个好处。您可以从任何支持它的控件中引发一个,但可以通过
CommandBinding
在可视化树中的任何位置处理它。这将允许您在窗口上拥有任意数量的用户控件,这些控件都有自己的“保存”按钮。然后,您可以在窗口级别捕获该命令,因为
RoutedCommand
会像事件一样在可视化树中弹出气泡。这让您可以在一个地方保存逻辑,但可以从任何地方“收集”,感谢您的良好解释。不幸的是,我似乎走错了方向:(@GTHvidsten,我想,重点是为常用命令提供成员。一种“不要重复自己”:
<Window x:Name="MainWindow">
    <Grid>
        <Button Content="Close"
                Command="{x:Static SystemCommands.CloseWindowCommand}"
                CommandParameter="{Binding ElementName=MainWindow}" />
    </Grid>
</Window>