WPF 标准命令 - 导出在哪里?

标签 wpf binding

我正在我的 WPF 应用程序中创建一个标准菜单。

我知道我可以创建自定义命令,但我知道还有一堆标准命令可以绑定(bind)。

例如,要打开一个文件我应该绑定(bind)到 ApplicationCommands.Open,要关闭一个文件我应该绑定(bind)到 ApplicationCommands.Close。还有大量的 EditCommands、ComponentCommands 或 NavigationCommands。

似乎没有“退出”命令。我原以为会有 ApplicationCommands.Exit。

我应该将什么绑定(bind)到“退出”菜单项?为这种通用的东西创建自定义命令似乎是错误的。

最佳答案

是的,Microsoft 包含 ApplicationCommands.Exit 会很有意义。命令在他们的预定义命令集合中。令我失望的是他们没有。但正如这个问题的答案所表明的那样,并非一切都丢失了。

由于缺少正确的 ApplicationCommands.Exit,有很多解决方法。目的。但是,我觉得最没捕获重点。他们要么在 View 模型中实现某些东西,对于严格意义上的 View 行为(在某些情况下使用例如 Application.Current.MainWindow !),或者他们编写一堆代码隐藏来执行 XAML 所做的事情非常好,更方便。

恕我直言,最简单的方法就是声明一个 RoutedUICommand窗口的资源,将其附加到命令绑定(bind)和菜单项,以连接所有部分。例如:

<Window x:Class="ConwaysGameOfLife.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">

  <Window.Resources>
    <RoutedUICommand x:Key="fileExitCommand" Text="File E_xit">
      <RoutedUICommand.InputGestures>
        <KeyGesture >Alt+F4</KeyGesture>
      </RoutedUICommand.InputGestures>
    </RoutedUICommand>
  </Window.Resources>

  <Window.CommandBindings>
    <CommandBinding Command="{StaticResource fileExitCommand}" Executed="fileExitCommand_Executed"/>
  </Window.CommandBindings>

  <DockPanel>
    <Menu DockPanel.Dock="Top">
      <MenuItem Header="_File">
        <!-- other menu items go here -->
        <Separator/>
        <MenuItem Command="{StaticResource fileExitCommand}"/>
      </MenuItem>
    </Menu>
    <!-- the main client area UI goes here -->
  </DockPanel>

</Window>
Executed命令绑定(bind)的事件处理程序很简单:

private void fileExitCommand_Executed(object sender, ExecutedRoutedEventArgs e)
{
    Close();
}

当然,假设您的程序实现遵循关闭主窗口以退出程序的通常语义。

这样,所有特定于 UI 的元素都直接进入 RoutedUICommand对象,可以在 XAML 中正确方便地进行配置,而不必声明一个新的 C# 类来实现命令和/或弄乱代码隐藏中的输入绑定(bind)。 MenuItem对象已经知道如何处理 RoutedUICommand在显示方面,因此走这条路线可以很好地将命令的属性与 UI 的其余部分解耦。它还提供了一种方便的方式来提供辅助键手势,以防您更喜欢默认的 Alt+F4(例如 Ctrl+W)以外的其他东西。

你甚至可以把 RoutedUICommand App.xaml 文件中的声明,以便在程序中的多个窗口之间重用(如果它们存在)。同样,将在资源中声明的 UI 特定方面与在整个程序中找到的消费者分离。

我发现这种方法比我见过的其他选项(这里和其他地方)更通用和更容易实现。

关于WPF 标准命令 - 导出在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1286692/

相关文章:

java - RMI 两次绑定(bind)相同的对象但呈现不同的接口(interface)

ios - Swift - 从 View 扩展以编程方式更新 Binding<String> 存储值

c# - ObservableCollection 添加项目

c# - 从新窗口绑定(bind) WPF

silverlight - XAML 绑定(bind) silverlight

c# - WPF - 将 DataGrid 导出到 Excel,Microsoft.Office.Interop.Excel 替代 Office 2019

wpf - 我可以为 WPF 中的一系列键创建 KeyBinding 吗?

c# - 双击事件在窗口级别和控件级别触发,即使它是在控件内处理的

WPF TouchEvents-捕获第一次触地得分

wpf - 以 WPF 窗口为父级的 Winform 对话框