通过键盘WPF设置ContextMenu的PlacementTarget

时间:2014-10-30 07:53:43

标签: c# wpf listbox contextmenu

我可以为PlacementTarget设置ContextMenu。它始终在列表框的中心打开(通过Shift + F10)。

我试过了:

private void listBox_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
  if (e.KeyboardDevice.Modifiers == ModifierKeys.Shift && 
      (e.Key == Key.F10 || e.SystemKey == Key.F10)){
       var listBox = sender as System.Windows.Controls.ListBox;
       listBox.ContextMenu.PlacementTarget = listBox.ItemContainerGenerator.ContainerFromItem(listBox.SelectedItem) as ListBoxItem;
  }
}

private void listBox_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
   var listBox = sender as System.Windows.Controls.ListBox;
   listBox.ContextMenu.PlacementTarget = listBox.ItemContainerGenerator.ContainerFromItem(listBox.SelectedItem) as ListBoxItem;
}

但它仍然没有按预期工作。 (我希望它显示在所选项目列表框的中心)

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我刚试过你的代码。问题是,一旦设置为PlacementTarget,您就无法更改ContextMenu的{​​{1}}。这意味着ListBox始终设置为ContextMenu的ListBox。据我所知,ContextMenu实际上用于所选项目。那么为什么不为每个项目设置呢?然后它预期工作。试试这个:

PlacementTarget

这里没有涉及任何代码。只需像上面那样更改你的XAML。

相关问题