在 EventTrigger (xaml) 中调用 SystemCommands.MinimizeWindowCommand

问题描述 投票:0回答:1
wpf xaml
1个回答
0
投票

InvokeCommandAction
不知道如何调用
RoutedCommand
。它只调用
ICommand.Execute
这不足以执行它。
我认为这个功能没有实现,因为它是完全多余的。这是因为路由命令本质上是路由事件。将路由事件转换为路由命令(另一个路由事件)绝对没有意义。

使用交互行为很少是一个好的解决方案。它只会导致奇怪的设计决策。 WPF 提供了所有必要且强大的功能。用平常的方式处理无聊的事情并没有什么错。事件很好,不违反任何设计模式。为什么要费心添加额外的代码来将事件转换为命令?

您必须实现路由命令处理程序。也不要绑定到静态只读

RoutedCommand
属性。只需将静态
RoutedCommand
值分配给
Button.Command
属性即可。

静态

SystemCommands
类定义了路由命令,例如
SystemCommands.MinimizeWindowCommand
以及关联的静态处理程序方法
SystemCommands.MinimizeWindow(Window)

SystemCommands
还为其每个命令提供了帮助器:
CloseWindow()
MaximizeWindow()
MinimizeWindow()
RestoreWindow()
ShowSystemMenu()
):

MainWindow.xaml

<Window>
  <Window.CommandBindings>
    <CommandBinding Command="{x:Static SystemCommands.MinimizeWindowCommand}"
                    Executed="ExecuteMinimizeWindowCommand"
                    CanExecute="CanExecuteWindowCommands" />
  </Window.CommandBindings>

  <Button Command="{x:Static SystemCommands.MinimizeWindowCommand}" />
</Window>

MainWindow.xaml.cs

partial class MainWindow : Window
{
  private void CanExecuteWindowCommands(object sender, CanExecuteRoutedEventArgs e)
    => e.CanExecute = true;

  private void ExecuteMinimizeWindowCommand(object sender, ExecutedRoutedEventArgs e)
    => SystemCommands.MinimizeWindow(this);
}

另一种解决方案是处理

Button.Click
事件并从事件处理程序执行所有必需的操作。

© www.soinside.com 2019 - 2024. All rights reserved.