ContextMenu用于禁用的按钮

时间:2012-11-26 08:32:06

标签: c# contextmenu

我想制作一个上下文菜单,当用户在控制台上进行“右键单击”时显示,这是一个按钮。不幸的是,一些按钮被禁用。有人可以帮助我并告诉我如何给他们一个上下文菜单吗?

我的(不工作)尝试:

        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
        }
    }

非常感谢提前。

2 个答案:

答案 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,从而允许交互传递到后面的边框,并使菜单按预期工作。