【问题标题】: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 上查看了解决方案,但我需要从后面的代码中实现它。任何帮助将不胜感激。

【问题讨论】:

标签: c# wpf alignment contextmenu


【解决方案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
猜你喜欢
  • 2013-11-09
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 2019-03-19
  • 1970-01-01
  • 2013-12-22
  • 1970-01-01
  • 2017-01-17
相关资源
最近更新 更多