我想制作一个上下文菜单,当用户在控制台上进行“右键单击”时显示,这是一个按钮。不幸的是,一些按钮被禁用。有人可以帮助我并告诉我如何给他们一个上下文菜单吗?
我的(不工作)尝试:
private void ShowRightClickMenu(object sender, MouseEventArgs e)
{
ContextMenu Temp = new ContextMenu();
if (e.Button == MouseButtons.Right && secondTagObj[Convert.ToInt32(((Button)sender).Tag)].typ != string.Empty)
{
this.ContextMenu = Temp; // works
Temp.MenuItems.Add("Create.."); //works
Temp.MenuItems.Add("Delete"); // works
}
if (raster[Convert.ToInt32(((Button)sender).Tag)].Enabled == false && e.Button == MouseButtons.Right)
{
this.ContextMenu = Temp; // works not
Temp.MenuItems.Add("New..."); // works not
}
else
{
this.ContextMenu = Temp; // works, but only if button is visible
Temp.MenuItems.Add("New..."); // works, but only if button is visible
}
}
非常感谢提前。
答案 0 :(得分:1)
在WPF中,您可以使用ContextMenuService
为禁用的控件启用上下文菜单。
private void ShowRightClickMenu(object sender, MouseEventArgs e)
{
ContextMenu Temp = new ContextMenu();
ContextMenuService.SetShowOnDisabled((Button)sender, true);
...
[更新以获得更好的可读性] 对于WinForms,请查看this entry at microsoft forums
希望这有帮助。
答案 1 :(得分:0)
(假设此问题是针对WPF的,如@medasocles答案的评论中所述...)
要使用WPF中@medasocles所指的ContextMenuService
,请执行以下操作:
<Button Content="Blah" Command="{Binding MyCommand}" ContextMenuService.ShowOnDisabled="True">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Context Item" Command="{Binding MyContextCommand}" />
</ContextMenu>
</Button.ContextMenu>
</Button>
我认为这不会真正解决您的问题。我认为将按钮放在边框(如边框)中,然后将上下文菜单添加到边框会更容易。然后,我将向按钮添加触发器,以在禁用按钮时将IsHitTestVisible
设置为False
,从而允许交互传递到后面的边框,并使菜单按预期工作。