在 MVVM Light 应用程序中实现编辑菜单
Implementing an Edit menu in MVVM Light application
我正在使用 MVVM Light 构建 WPF 应用程序。我在我的 window 中添加了一个菜单,其中包括标准文件和编辑菜单:
<Window x:Class="ParserEditor.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"
xmlns:local="clr-namespace:ParserEditor"
xmlns:ignore="http://www.galasoft.ch/ignore"
xmlns:i="clr namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF4"
mc:Ignorable="d ignore"
Closing="Window_Closing"
DataContext="{Binding Main, Source={StaticResource Locator}}"
Height="{Binding Height, Mode=TwoWay}"
MaxHeight="{Binding MaxHeight, Mode=TwoWay}"
MinHeight="{Binding MinHeight, Mode=TwoWay}"
MinWidth="450"
Width="450"
Title="{Binding WindowTitle}">
<Window.InputBindings>
<KeyBinding Command="{Binding NewParserCommand}" Gesture="CTRL+N" />
<KeyBinding Command="{Binding OpenParserCommand}" Gesture="CTRL+O" />
<KeyBinding Command="{Binding SaveParserCommand}" Gesture="CTRL+S" />
<KeyBinding Command="{Binding SaveParserAsCommand}" Gesture="ALT+A" />
<KeyBinding Command="{Binding ExitCommand}" Gesture="ALT+F4" />
<KeyBinding Command="{Binding ApplicationCommands.Undo}" Gesture="CTRL+Z" />
<KeyBinding Command="{Binding ApplicationCommands.Redo}" Gesture="CTRL+Y" />
<KeyBinding Command="{Binding ApplicationCommands.Cut}" Gesture="CTRL+X" />
<KeyBinding Command="{Binding ApplicationCommands.Copy}" Gesture="CTRL+C" />
<KeyBinding Command="{Binding ApplicationCommands.Paste}" Gesture="CTRL+V" />
<KeyBinding Command="{Binding ApplicationCommands.Delete}" Gesture="DEL" />
<KeyBinding Command="{Binding ApplicationCommands.SelectAll}" Gesture="CTRL+A" />
</Window.InputBindings>
<DockPanel Name="Dock">
<Menu IsMainMenu="true" DockPanel.Dock="Top">
<MenuItem Header="_File">
<MenuItem Header="_New..." InputGestureText="Ctrl-N" Command="{Binding NewParserCommand}" />
<MenuItem Header="_Open..." InputGestureText="Ctrl-O" Command="{Binding OpenParserCommand}" />
<MenuItem Header="_Save..." InputGestureText="Ctrl-S" Command="{Binding SaveParserCommand}" />
<MenuItem Header="Save _As..." InputGestureText="Alt-A" Command="{Binding SaveParserAsCommand}" />
<Separator />
<MenuItem Header="E_xit" InputGestureText="Alt-F4" Command="{Binding ExitCommand}" />
</MenuItem>
<MenuItem Header="_Edit">
<MenuItem Header="Undo" InputGestureText="Ctrl-Z" />
<MenuItem Header="Redo" InputGestureText="Ctrl-Y" />
<Separator/>
<MenuItem Header="Cut" InputGestureText="Ctrl-X" />
<MenuItem Header="Copy" InputGestureText="Ctrl-C" />
<MenuItem Header="Paste" InputGestureText="Ctrl-V" />
<MenuItem Header="Delete" InputGestureText="Del" />
<MenuItem Header="Select All" InputGestureText="Ctrl-A" />
</MenuItem>
</Menu>
<Grid x:Name="LayoutRoot">
<!-- Some controls, including TextBlocks & TextBoxes here -->
</Grid>
</DockPanel>
</Window>
现在,如果我 运行 应用程序并在其中一个 TextBox
控件中进行一些编辑,我可以使用常用的键盘快捷键来剪切、复制和粘贴文本、撤消和重做焦点上的动作是控件。但是,如果我单击“编辑”菜单并在那里使用我的选项之一,则什么也不会发生。
如何让我的菜单项起作用?
我想通了。发布问题并查看 XAML 后,我注意到“编辑”菜单项没有绑定任何命令。我将所需的 Command="ApplicationCommands.xxx"
语句添加到 XAML,现在“编辑”菜单可以使用了。
我正在使用 MVVM Light 构建 WPF 应用程序。我在我的 window 中添加了一个菜单,其中包括标准文件和编辑菜单:
<Window x:Class="ParserEditor.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"
xmlns:local="clr-namespace:ParserEditor"
xmlns:ignore="http://www.galasoft.ch/ignore"
xmlns:i="clr namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF4"
mc:Ignorable="d ignore"
Closing="Window_Closing"
DataContext="{Binding Main, Source={StaticResource Locator}}"
Height="{Binding Height, Mode=TwoWay}"
MaxHeight="{Binding MaxHeight, Mode=TwoWay}"
MinHeight="{Binding MinHeight, Mode=TwoWay}"
MinWidth="450"
Width="450"
Title="{Binding WindowTitle}">
<Window.InputBindings>
<KeyBinding Command="{Binding NewParserCommand}" Gesture="CTRL+N" />
<KeyBinding Command="{Binding OpenParserCommand}" Gesture="CTRL+O" />
<KeyBinding Command="{Binding SaveParserCommand}" Gesture="CTRL+S" />
<KeyBinding Command="{Binding SaveParserAsCommand}" Gesture="ALT+A" />
<KeyBinding Command="{Binding ExitCommand}" Gesture="ALT+F4" />
<KeyBinding Command="{Binding ApplicationCommands.Undo}" Gesture="CTRL+Z" />
<KeyBinding Command="{Binding ApplicationCommands.Redo}" Gesture="CTRL+Y" />
<KeyBinding Command="{Binding ApplicationCommands.Cut}" Gesture="CTRL+X" />
<KeyBinding Command="{Binding ApplicationCommands.Copy}" Gesture="CTRL+C" />
<KeyBinding Command="{Binding ApplicationCommands.Paste}" Gesture="CTRL+V" />
<KeyBinding Command="{Binding ApplicationCommands.Delete}" Gesture="DEL" />
<KeyBinding Command="{Binding ApplicationCommands.SelectAll}" Gesture="CTRL+A" />
</Window.InputBindings>
<DockPanel Name="Dock">
<Menu IsMainMenu="true" DockPanel.Dock="Top">
<MenuItem Header="_File">
<MenuItem Header="_New..." InputGestureText="Ctrl-N" Command="{Binding NewParserCommand}" />
<MenuItem Header="_Open..." InputGestureText="Ctrl-O" Command="{Binding OpenParserCommand}" />
<MenuItem Header="_Save..." InputGestureText="Ctrl-S" Command="{Binding SaveParserCommand}" />
<MenuItem Header="Save _As..." InputGestureText="Alt-A" Command="{Binding SaveParserAsCommand}" />
<Separator />
<MenuItem Header="E_xit" InputGestureText="Alt-F4" Command="{Binding ExitCommand}" />
</MenuItem>
<MenuItem Header="_Edit">
<MenuItem Header="Undo" InputGestureText="Ctrl-Z" />
<MenuItem Header="Redo" InputGestureText="Ctrl-Y" />
<Separator/>
<MenuItem Header="Cut" InputGestureText="Ctrl-X" />
<MenuItem Header="Copy" InputGestureText="Ctrl-C" />
<MenuItem Header="Paste" InputGestureText="Ctrl-V" />
<MenuItem Header="Delete" InputGestureText="Del" />
<MenuItem Header="Select All" InputGestureText="Ctrl-A" />
</MenuItem>
</Menu>
<Grid x:Name="LayoutRoot">
<!-- Some controls, including TextBlocks & TextBoxes here -->
</Grid>
</DockPanel>
</Window>
现在,如果我 运行 应用程序并在其中一个 TextBox
控件中进行一些编辑,我可以使用常用的键盘快捷键来剪切、复制和粘贴文本、撤消和重做焦点上的动作是控件。但是,如果我单击“编辑”菜单并在那里使用我的选项之一,则什么也不会发生。
如何让我的菜单项起作用?
我想通了。发布问题并查看 XAML 后,我注意到“编辑”菜单项没有绑定任何命令。我将所需的 Command="ApplicationCommands.xxx"
语句添加到 XAML,现在“编辑”菜单可以使用了。