ControlTemplate中的MenuItem快捷方式

时间:2013-09-10 14:14:55

标签: wpf menuitem shortcut controltemplate

我有下一个makrup:

<Style TargetType="{x:Type MenuItem}">
<Setter Property="MinWidth" Value="65" />
<Setter Property="MinHeight" Value="30" />
<Setter Property="IsTabStop" Value="False" />
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type MenuItem}">
            <Border x:Name="MainBorder" BorderThickness="1" Background="Black">                 
                <TextBlock Margin="5" Text="{TemplateBinding Header}" Foreground="{TemplateBinding Foreground}" />

                <Popup x:Name="SubMenuPopup" IsOpen="{Binding Path=IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}" Placement="Right"
                            AllowsTransparency="True" Focusable="False">
                    <Border Background="Gray">
                        <Grid x:Name="SubMenu" Grid.IsSharedSizeScope="True" Background="Transparent">
                            <StackPanel Margin="0" IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Cycle" Background="Gray" />
                        </Grid>
                    </Border>
                </Popup>
            </Border>
        </ControlTemplate>
    </Setter.Value>
</Setter>

当我在某处创建MenuItem并使用&#34; _&#34;设置它的标题属性时符号 - 它不会为此菜单项创建快捷方式。 示例 - 字母&#39; F&#39;没有加下划线,快捷方式也不起作用。

如何在MenuItems中支持ControlTemplates中的快捷方式?

感谢。

2 个答案:

答案 0 :(得分:3)

它不是完整的模板,而是TextBlock放置了一个可以识别访问键的ContentPresenter:

<ContentPresenter Margin="5" Content="{TemplateBinding Header}" TextBlock.Foreground="{TemplateBinding Foreground}" RecognizesAccessKey="True" />

我认为你在这里粘贴的xaml只是你实现的一部分,所以我的解决方案是继续使用访问密钥工作的...

您可以找到与此类似的完整模板:http://msdn.microsoft.com/en-us/library/ms747082%28v=vs.85%29.aspx

答案 1 :(得分:0)

如果您希望菜单项字母在keypress下划线,那么您必须在menuitem上设置InputGesture,如下所示:

      <MenuItem Header="_File" 
          InputGestureText="Ctrl+F"
          Commmand={Binding NewFileCommand}/>

但是如果你想为menuitem命令创建快捷方式,那么你必须在你的窗口上创建如下所示的命令绑定:

      <Window.CommandBindings>
                <CommandBinding Command="local:MyCommands.NewFile" Executed="NewFile_Executed" />
        </Window.CommandBindings>
        <Window.InputBindings>
                <KeyBinding Key="F" Modifiers="Control" Command="local:MyCommands.NewFile"/>
        </Window.InputBindings>