2

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

我的(不工作)尝试:

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

提前谢谢了。

4

2 回答 2

1

在 WPF 中,您可以使用ContextMenuService为禁用的控件启用上下文菜单。

private void ShowRightClickMenu(object sender, MouseEventArgs e)
{
    ContextMenu Temp = new ContextMenu();
    ContextMenuService.SetShowOnDisabled((Button)sender, true);
...

[更新以获得更好的可读性] 对于 WinForms,请查看Microsoft 论坛上的此条目

希望这可以帮助。

于 2012-11-26T09:39:07.437 回答
1

(假设这个问题是针对 WPF 的,如@medasocles 回答的评论中所示......)

ContextMenuService在 WPF 中使用 @medasocles 所提到的,您可以执行以下操作:

<Button Content="Blah" Command="{Binding MyCommand}" ContextMenuService.ShowOnDisabled="True">
    <Button.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Context Item" Command="{Binding MyContextCommand}" />
        </ContextMenu>
    </Button.ContextMenu>
</Button>

我不相信这会真正解决你的问题。我认为将按钮放在框架中会更容易,比如边框,并将上下文菜单添加到边框。然后,我将向按钮添加一个触发器,该触发器设置为何IsHitTestVisibleFalse禁用按钮,从而允许交互传递到后面的边框,并且您的菜单可以按预期工作。

于 2019-11-18T21:52:40.747 回答