两个ContextMenus同时进行多点触控

时间:2011-04-06 06:59:53

标签: wpf contextmenu

如何在我的窗口同时显示两个ContextMenu

这是我的班级

 public partial class Window1 : Window
    {
        ContextMenu contextMenu1 = new ContextMenu();
        ContextMenu contextMenu2 = new ContextMenu();
        public Window1()
        {
            InitializeComponent();
            contextMenu1.Items.Add("Hello1");
            contextMenu2.Items.Add("Hello2");

            contextMenu1.Placement = System.Windows.Controls.Primitives.PlacementMode.Relative;
            contextMenu2.Placement = System.Windows.Controls.Primitives.PlacementMode.Relative;

            contextMenu1.PlacementTarget = rectangle1;
            contextMenu2.PlacementTarget = rectangle2;
            contextMenu1.StaysOpen = true;
            contextMenu2.StaysOpen = true;

        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            contextMenu1.IsOpen = true;
            contextMenu2.IsOpen = true;
        }
    }

3 个答案:

答案 0 :(得分:2)

通常情况下,单击其他位置而不是上下文菜单本身时,上下文菜单将消失。因此,同时打开两个上下文菜单将涉及一些特殊处理。

除此之外,此设置很可能会导致用户感到困惑。

也许您应该考虑其他选项(工具栏,属性面板,级联上下文菜单)

修改

现在您已将代码添加到问题中,我更担心这种方法。你想给用户提供什么?您应该只使用Grids或DockPanel而不是矩形,并为它们添加常规菜单:

    <DockPanel Width="200"
               Height="200">
        <Menu DockPanel.Dock="Top">
            <MenuItem Header="Hello1" />
        </Menu>
        <Grid />
    </DockPanel>
    <DockPanel Width="200"
               Height="200">
        <Menu DockPanel.Dock="Top">
            <MenuItem Header="Hello2" />
        </Menu>
        <Grid />
    </DockPanel>
</StackPanel>

答案 1 :(得分:1)

您可以使用Popup控件并捕获右键单击事件以显示它。

不幸的是,你将从头开始并且必须重建上下文菜单,但是一次打开两个就没有问题。

答案 2 :(得分:0)

在不知道你想要做的很多细节的情况下 - 它是WPF!所以你可以像你想要的那样设计风格。 您可以通过鼠标右键单击显示对话框/用户控件/ Windows,并像上下文菜单一样设置样式,但它们应该看起来像。有了这个,您可以完全控制您想要显示的内容......