我可以为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;
}
但它仍然没有按预期工作。 (我希望它显示在所选项目列表框的中心)
有什么建议吗?
答案 0 :(得分:1)
我刚试过你的代码。问题是,一旦设置为PlacementTarget
,您就无法更改ContextMenu
的{{1}}。这意味着ListBox
始终设置为ContextMenu的ListBox
。据我所知,ContextMenu实际上用于所选项目。那么为什么不为每个项目设置呢?然后它预期工作。试试这个:
PlacementTarget
这里没有涉及任何代码。只需像上面那样更改你的XAML。