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

Posted

技术标签:

【中文标题】如何将上下文菜单对齐到右下角?【英文标题】:How to align the context menu to bottom right? 【发布时间】:2018-11-08 11:05:11 【问题描述】:

我有以下代码用于打开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;
    

所以,我的上下文菜单在出现时如下所示:

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

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

【问题讨论】:

这可能会帮助您继续前进:msdn.microsoft.com/en-us/library/ms750577(v=vs.85).aspx 【参考方案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;

【讨论】:

我编辑了我的代码......我也会尝试你的代码......但最后一个问题......例如,我有 4 个并排的控件(即矩形),每个控件都有相同的高度和宽度.. 有没有办法让他们的上下文菜单出现在某个区域?我的意思是,假设 grid'w 的宽度是 400,现在,在它的底部,我添加了 4 个 100px 宽度的矩形......那么,有没有办法,它们的所有上下文菜单都会出现在它们上方但会卡在网格/网格区域内? sample image @zackraiyan,这是一个不同的问题。请单独询问。 为什么?题目是一样的....你知道答案或者至少给我一些线索或者一些基本的想法吗? @zackraiyan,因为this。

以上是关于如何将上下文菜单对齐到右下角?的主要内容,如果未能解决你的问题,请参考以下文章

css怎么让div上下居中,靠右对齐

WPF ContextMenu 文本对齐

如何将上下文菜单项添加到FlowDocumentScrollViewer内的textBox

如何将上下文菜单添加到 ListBoxItem?

如何将上下文菜单添加到 wpf 数据网格?

如何使用 SwiftUI 将上下文菜单添加到 NavigationLink?