2017-05-25 243 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'冒出可視化樹,就像事件一樣。這可以讓你在一個地方保存邏輯,但從任何地方都可以「提升」, –

相關問題