2017-05-25 252 views
0

有一个名为SystemCommands的WPF类。我见过在按钮上使用这些命令的例子来执行常见的窗口任务,如最大化,最小化和关闭。XAML通过SystemCommands最小化/最大化/关闭按钮

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

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

当我启动应用程序的按钮将被禁用,我不能点击它。更改IsEnabled属性不起作用。

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

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

回答

1

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

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

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

+0

我明白了。不过,这让我很好奇。无论如何你必须提供你自己的实现,这些命令的意义是什么? SystemCommands有一个常规的按钮单击事件处理程序不具有什么优势? – GTHvidsten

+1

'RoutedCommand'是WPF去完整MVVM之前的一个保留位。在MVVM模式中,您将使用自己的'ICommand'实现。这样做的好处是命令代码存在于视图模型中,而不是视图中。 'RoutedCommand' *确实*有一个好处。你可以从支持它的任何东西中提取一个,但通过'CommandBinding'在视觉树中的任何位置处理它。 –

+0

这将允许您在拥有自己的“保存”按钮的窗口上拥有任意数量的用户控件。然后,你可以在窗口级别捕获该命令,因为'RoutedCommand'冒出可视化树,就像事件一样。这可以让你在一个地方保存逻辑,但从任何地方都可以“提升”, –

相关问题