【问题标题】:How to open ContextMenu by using keyboard shortcut如何使用键盘快捷键打开 ContextMenu
【发布时间】:2011-11-29 22:23:30
【问题描述】:

我在列标题之一中使用 ContextMenu 创建 WPF DataGrid,如下所示:

<DataGrid x:Name="grid" ItemsSource="{Binding Path=Orders}">
    <DataGrid.InputBindings>
            <KeyBinding Command="{Binding Path=ShowStatusHeaderContextMenuCommand}"
                        CommandParameter="{Binding ElementName=FristNameContextMenu}"
                        Gesture="Ctrl+S" />
    </DataGrid.InputBindings>
    <DataGrid.Columns>
        <DataGridTemplateColumn Width="30" Header="Status">
            <DataGridTemplateColumn.HeaderTemplate>
               <DataTemplate>
                  <TextBlock x:Name="StatusHeaderTextBlock" Text="Status">
                      <TextBlock.ContextMenu>
                            <ContextMenu x:Name="FristNameContextMenu">
                                <MenuItem Command="{Binding SetCompleteFlagsCommand}" Header="Complete"/>
                                <MenuItem Command="{Binding ClearDeleteFlagsCommand}" Header="Deleted" />
                            </ContextMenu>
                      </TextBlock.ContextMenu>
                  </TextBlock>
               </DataTemplate>
            </DataGridTemplateColumn.HeaderTemplate>
        </DataGridTemplateColumn>

         <DataGridTextColumn Width="100"
                             Header="Order Number"
                             Binding = "{Binding Path=OrderNumber}"/>
    <DataGrid.Columns>
</DataGrid>

如果我右键单击状态列标题,它会调出 ContextMenu。但我想添加一个快捷键“Control + S”来调出 ContextMenu。有人知道怎么加吗?

谢谢

【问题讨论】:

  • 您可以收听“KeyboardEvent”,这应该是您的解决方案,在选定位置打开上下文菜单

标签: wpf wpf-controls wpfdatagrid


【解决方案1】:

创建一个command 以打开上下文菜单,并使用该命令和您的手势将KeyBinding 添加到应应用快捷方式的控件的InputBindings

(另外:Ctrl+S 按照惯例是“保存”,我不确定你是否真的想将它用于上下文菜单)

【讨论】:

  • 感谢您的回复。我在控件上添加了InputBinding,在后面的代码中添加了Command。如何在命令执行中打开上下文菜单。目前我无法访问上下文菜单将IsOpen 设置为True
  • @Jing:您可以将ContextMenu 作为命令参数传递(通过绑定),或者将IsOpen 绑定到某个属性,然后您的命令只是将该属性设置为true。
  • 我都试过了。两者都不工作。我尝试将ContextMenu 作为命令参数传递,但只得到null。我更新了我的帖子,所以你可以看看。
  • @Jing:当然不行,ContextMenu 在模板内部,控件在不同的名称范围内,您无法从外部绑定到它。您可以做的是将上下文菜单定义为资源,然后您可以通过 StaticResource 传递它,也可以通过 StaticResource 在模板中使用它。
猜你喜欢
  • 2021-11-26
  • 1970-01-01
  • 2015-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-06
相关资源
最近更新 更多