限制/移动窗口边界中的上下文菜单(右键单击)

时间:2015-01-22 13:58:22

标签: c# wpf windows winapi contextmenu

每当您右键单击浏览器(或任何其他应用程序)的边缘时,上下文菜单将溢出窗口,但不会溢出屏幕。

我希望上下文菜单始终位于窗口边界,所以当我点击底边附近时,它应该显示顶部的菜单。假设窗口的尺寸总是大于上下文菜单。

这可能吗?如果没有,是否有任何解决方法?

P.S。我没有构建应用程序窗口,只是应用程序的查看器。

Context-menu going out of bounds

1 个答案:

答案 0 :(得分:-1)

使用ContextMenu的PlacementPlacementRectangle属性。

在下面的这个例子中,我将Placement属性设置为“Relative”,将Rectangle设置为x,y坐标25,25。然后,无论我在哪里单击,上下文菜单都会出现在25,25,相对于Button

<Button ContextMenuService.Placement="Relative" ContextMenuService.PlacementRectangle="25, 25, 0, 0">
    <Button.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Do this" />
            <MenuItem Header="Do that" />
        </ContextMenu>
    </Button.ContextMenu>
</Button>

当然,您可以根据菜单的大小及其与边缘的接近程度,对这些属性使用的值进行更动态的计算。