<Button Name="btnFoo" Content="Foo" >
<Button.ContextMenu Placement="Bottom" PlacementTarget="btnFoo">
<MenuItem Header="Bar" />
</Button.ContextMenu>
</Button>
给我一个运行时错误'UIElement'类型没有公共TypeConverter类
我也试过
<Button Name="btnFoo" Content="Foo" >
<Button.ContextMenu Placement="Bottom" PlacementTarget="{Binding ElementName=btnFoo}">
<MenuItem Header="Bar" />
</Button.ContextMenu>
</Button>
并将ContextMenu放在屏幕的左上角,而不是按钮
答案 0 :(得分:25)
您应该在按钮上设置ContextMenuService.Placement附加属性,如ContextMenu.Placement文档中的备注中所述。
<Button Name="btnFoo" Content="Foo" ContextMenuService.Placement="Bottom">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Bar" />
</ContextMenu>
</Button.ContextMenu>
</Button>
答案 1 :(得分:3)
你试过这个:
<Button Name="btnFoo" Content="Foo">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Bar" />
</ContextMenu>
</Button.ContextMenu>
</Button>
这将使ContextMenu在你右键单击鼠标的位置打开(在按钮上)。 我认为可能是你想要的位置吗?
---编辑--- 在这种情况下使用:
<Button Name="btnFoo" Content="Foo" ContextMenuOpening="ContextMenu_ContextMenuOpening">
<Button.ContextMenu>
<ContextMenu Placement="Bottom">
<MenuItem Header="Bar" />
</ContextMenu>
</Button.ContextMenu>
</Button>
在代码背后:
private void ContextMenu_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
// Get the button and check for nulls
Button button = sender as Button;
if (button == null || button.ContextMenu == null)
return;
// Set the placement target of the ContextMenu to the button
button.ContextMenu.PlacementTarget = button;
// Open the ContextMenu
button.ContextMenu.IsOpen = true;
e.Handled = true;
}
您可以将该方法重复用于多个按钮和ContextMenu的..
答案 2 :(得分:0)
您可以使用<Menu />
,样式为Button
,避免与ContextMenuService
一起使用。