WPF键手势PageDown在菜单项中显示为Next

时间:2010-06-17 20:42:37

标签: wpf keyboard-shortcuts menuitem

我设置了一个自定义命令,其中PageDown作为键手势,但对于绑定到该命令的MenuItem,手势显示为“下一步”。问题是我有相关任务使用PageUp,Home和End的命令,它们都按照预期显示在MenuItem上。是否有一些方法可以使MenuItem显示“PageDown”而不是“Next”以保持一致性?

这是定义命令的xaml。

<Window.Resources>
    <RoutedUICommand x:Key="FirstPageCommand" 
                     Text="FirstPage">
        <RoutedUICommand.InputGestures>
            <KeyGesture>Home</KeyGesture>
        </RoutedUICommand.InputGestures>
    </RoutedUICommand>
    <RoutedUICommand x:Key="LastPageCommand" 
                     Text="LastPage">
        <RoutedUICommand.InputGestures>
            <KeyGesture>End</KeyGesture>
        </RoutedUICommand.InputGestures>
    </RoutedUICommand>
    <RoutedUICommand x:Key="PreviousPageCommand" 
                     Text="PreviousPage">
        <RoutedUICommand.InputGestures>
            <KeyGesture>PageUp</KeyGesture>
        </RoutedUICommand.InputGestures>
    </RoutedUICommand>
    <RoutedUICommand x:Key="NextPageCommand" 
                     Text="NextPage">
        <RoutedUICommand.InputGestures>
            <KeyGesture>PageDown</KeyGesture>
        </RoutedUICommand.InputGestures>
    </RoutedUICommand>
</Window.Resources>

这是我在菜单中使用它们的地方

<MenuItem Header="_View">
    <MenuItem Header="_First Page" 
              Command="{StaticResource FirstPageCommand}">
        <MenuItem.Icon>
            <Image Source="Images\Backward_01.png" 
               Stretch="Uniform"/>
        </MenuItem.Icon>
    </MenuItem>
    <MenuItem Header="_Previous Page" 
              Command="{StaticResource PreviousPageCommand}">
        <MenuItem.Icon>
            <Image Source="Images\Backward.png"
               Stretch="Uniform"/>
        </MenuItem.Icon>
    </MenuItem>
    <MenuItem Header="_Next Page" 
              Command="{StaticResource NextPageCommand}">
        <MenuItem.Icon>
            <Image Source="Images\Forward.png"
               Stretch="Uniform"/>
        </MenuItem.Icon>
    </MenuItem>
    <MenuItem Header="_Last Page" 
              Command="{StaticResource LastPageCommand}">
        <MenuItem.Icon>
            <Image Source="Images\Forward_01.png"
               Stretch="Uniform"/>
        </MenuItem.Icon>
    </MenuItem>
</MenuItem>

我的菜单看起来像这样

  • 查看
    • 第一页主页
    • 最后一页PageUp
    • 下一页下一页
    • 最后一页

1 个答案:

答案 0 :(得分:3)

显然只有在用这样的代码定义命令时才可以这样做。

public class MyCommands
{
    public static RoutedUICommand NextPage { get; private set; }
    public static RoutedUICommand PreviousPage { get; private set; }

    static OCRopingCommands()
    {
        NextPage = new RoutedUICommand("NextPage", "NextPage", typeof(MyCommands));
        NextPage.InputGestures.Add(
            new KeyGesture(Key.PageDown, ModifierKeys.None, "PageDn"));
        PreviousPage = new RoutedUICommand("PreviousPage", "PreviousPage", typeof(MyCommands));
        PreviousPage.InputGestures.Add(
            new KeyGesture(Key.PageUp, ModifierKeys.None, "PageUp"));
    }
}

以下是你如何连接它们

<MenuItem Header="_Previous Page" 
          Command="local:MyCommands.PreviousPage">
    <MenuItem.Icon>
        <Image Source="Images\Backward.png"
           Stretch="Uniform"/>
    </MenuItem.Icon>
</MenuItem>
<MenuItem Header="_Next Page" 
          Command="local:MyCommands.NextPage">
    <MenuItem.Icon>
        <Image Source="Images\Forward.png"
           Stretch="Uniform"/>
    </MenuItem.Icon>
</MenuItem>

为什么KeyGesture不允许您在xaml中设置显示名称超出我的范围。