C# WPF:最小化用户界面上的代码落后

C# WPF:最小化用户界面上的代码落后,c#,wpf,xaml,C#,Wpf,Xaml,我又在玩WPF/XAML了,我注意到似乎没有一种简单的方法来编写只支持UI的按键手势/鼠标手势等等。例如,如何向窗口添加“不使用windowframe最大化”命令 目前,这涉及的代码与代码隐藏中的代码类似: public partial class MainWindow : Window { public static RoutedUICommand Maximize = new RoutedUICommand("Maximizes window.", "Maximize", typ

我又在玩WPF/XAML了,我注意到似乎没有一种简单的方法来编写只支持UI的按键手势/鼠标手势等等。例如,如何向窗口添加“不使用windowframe最大化”命令

目前,这涉及的代码与代码隐藏中的代码类似:

  public partial class MainWindow : Window {
    public static RoutedUICommand Maximize = new RoutedUICommand("Maximizes window.", "Maximize", typeof(MainWindow));

    public MainWindow() {
      Loaded += MainWindow_AddCommands;
      InitializeComponent();
    }

    void MainWindow_AddCommands(object sender, RoutedEventArgs e) {
      var CanExecuteMaximize = new CanExecuteRoutedEventHandler((obj, args) => {
        if (!(WindowState == WindowState.Minimized))
          args.CanExecute = true;
        else
          args.CanExecute = false;
      });

      var ExecutedMaximize = new ExecutedRoutedEventHandler((obj, args) => {
        switch (WindowStyle) {
          case WindowStyle.None:
            WindowStyle = WindowStyle.SingleBorderWindow;
            break;
          case WindowStyle.SingleBorderWindow:
            WindowStyle = WindowStyle.None;
            break;
          default:
            break;
        }
        switch (WindowState) {
          case WindowState.Maximized:
            WindowState = WindowState.Normal;
            break;
          case WindowState.Minimized:
            throw new InvalidOperationException();
          case WindowState.Normal:
            WindowState = System.Windows.WindowState.Maximized;
            break;
          default:
            break;
        }
      });

      CommandBindings.Add(new CommandBinding(Maximize, ExecutedMaximize, CanExecuteMaximize));
    }
  }
在XAML中:

  <Window.InputBindings>
    <KeyBinding Command="{x:Static local:MainWindow.Maximize}" Gesture="F11"/>
  </Window.InputBindings>
但这似乎完全落后。背后的代码根本不应该处理UI!似乎可以通过创建一个依赖项属性并使用EventTriggers来部分缓解这种情况,但这仍然会导致一些代码看起来不应该存在


有没有办法在没有代码隐藏的情况下实现适当的F11最大化?

这个问题的答案提供了几个选项:谢谢Eric,这里肯定有一些好东西,但我想看看是否有人有一个只使用XAML的解决方案。毕竟,这完全是一个UI问题,不应该依赖于后面的代码。至少,我希望代码隐藏足够通用,以便以后可以添加一个F6键,使当前选定元素的边框更厚,而无需再次重写代码隐藏。所以我想我要问的是,是否有一种触发器类型可以在按键时触发?这个问题的答案提供了两个选项:谢谢Eric,这里肯定有一些好东西,但我想看看是否有人有一个只使用XAML的解决方案。毕竟,这完全是一个UI问题,不应该依赖于后面的代码。至少,我希望代码隐藏足够通用,以便以后可以添加一个F6键,使当前选定元素的边框更厚,而无需再次重写代码隐藏。所以我想我要问的是,有没有一种触发器可以在按键时触发?