如何将上下文菜单对齐到右下角?

时间:2018-05-29 18:01:43

标签: c# wpf alignment contextmenu

我有以下代码用于打开Rectangle的上下文菜单:

private void RectBtn_MouseDown(object sender, MouseButtonEventArgs e)
{
    var cm = ContextMenuService.GetContextMenu(sender as DependencyObject);
    if (cm == null)
        return;
    else
    {
        cm.Placement = PlacementMode.Top;
        cm.PlacementTarget = sender as UIElement;
        cm.IsOpen = true;
    }
}

因此,我的上下文菜单出现时如下所示:

Model 1

有没有办法从后面的代码中实现以下外观(保留上面的代码)?

Model 2

我查看了this SO post上的解决方案,但我需要从后面的代码中实现它。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您的代码与您发布的图片不对应。您设置了Bottom展示位置,但在屏幕截图中,上下文菜单位于目标的顶部。

无论如何,您可以使用Custom展示位置并手动计算位置:

else
{
    cm.Placement = PlacementMode.Custom;
    cm.PlacementTarget = sender as UIElement;

    cm.CustomPopupPlacementCallback = 
        (popupSize, targetSize, offset) => 
            new[] 
            { 
                new CustomPopupPlacement 
                { 
                    Point = new Point(targetSize.Width - popupSize.Width, targetSize.Height) 
                } 
            };

    cm.IsOpen = true;
}