如何在XAML中的菜单项旁边显示键盘快捷键

时间:2014-03-07 01:23:25

标签: c# xaml

我在XAML中使用MenuItem,使用InputGestureText我在菜单项中添加了键盘快捷键。我感到困惑的是如何在每个具有键盘快捷键的项目旁边的实际菜单中显示键盘快捷键。

我不想向Header添加文字,而是显示InputGestureText的值,因此无需修改标题即可对其进行更改。

我正在使用WPF Localization Extension

Menu的代码

<Menu Grid.Row="0" Height="30" >
        <MenuItem Header="{lex:Loc Project75:lang:mnuFileMenu}">
            <MenuItem Header="{lex:Loc Project75:lang:mnuFileMenuNew}">
                <MenuItem Header="{lex:Loc Project75:lang:mnuFileMenuNew}" Command="{Binding Path=NewCommand}" InputGestureText="Ctrl+N"/>
                <MenuItem Header="{lex:Loc Project75:lang:mnuFileMenuNewEmailTemplate}" Command="{Binding Path=NewEmailTemplateCommand}" />
                <MenuItem Header="{lex:Loc Project75:lang:mnuFileMenuNewContact}" Command="{Binding Path=NewContactCommand}" />
            </MenuItem>
            <MenuItem Header="{lex:Loc Project75:lang:mnuFileMenuImport}" Command="{Binding Path=ImportCommand}" InputGestureText="Ctrl+I"/>
            <MenuItem Header="{lex:Loc Project75:lang:mnuFileMenuExport}" Command="{Binding Path=ExportCommand}" InputGestureText="Ctrl+E"/>
            <Separator/>
            <MenuItem Header="{lex:Loc Project75:lang:mnuFileMenuSave}" Command="{Binding Path=SaveDocumentCommand}" InputGestureText="Ctrl+S"/>
            <MenuItem Header="{lex:Loc Project75:lang:mnuFileMenuSaveAll}" Command="{Binding Path=SaveAllDocumentsCommand}" InputGestureText="Ctrl+Shift+S" ToolTip="Closes all open Windows"/>
            <Separator/>
            <MenuItem Header="{lex:Loc Project75:lang:mnuFileMenuClose}" Command="{Binding Path=CloseDocumentCommand}" InputGestureText="Ctrl+F4"/>
            <MenuItem Header="{lex:Loc Project75:lang:mnuFileMenuCloseAll}" Command="{Binding Path=CloseAllDocumentsCommand}" InputGestureText="Ctrl+Shift+F4"/>
            <Separator/>
            <MenuItem Header="{lex:Loc Project75:lang:mnuFileMenuExit}" Command="{Binding Path=ExitCommand}" InputGestureText="Alt+F4"/>
        </MenuItem>
        <MenuItem Header="{lex:Loc Project75:lang:mnuHelpMenu}">
            <MenuItem Header="{lex:Loc Project75:lang:mnuHelpMenuAbout}" Command="{Binding Path=AboutCommand}"/>
        </MenuItem>
</Menu>

1 个答案:

答案 0 :(得分:2)

试试这个:

<Window.Resources>
    <ControlTemplate TargetType="MenuItem" x:Key="controlTemplate">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Header}"></TextBlock>
            <TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=InputGestureText}" Margin="5,0,0,0"></TextBlock>
        </StackPanel>
    </ControlTemplate>
</Window.Resources>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <Menu>
        <MenuItem Header="Foo">
            <MenuItem Header="Bar" Command="Copy" Template="{StaticResource controlTemplate}"></MenuItem>
        </MenuItem>
    </Menu>
</Grid>

我使用copy命令作为示例,但您可以使用任何其他命令。标题可以像您一样进行本地化。