Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将关联菜单与右下角对齐?_C#_Wpf_Alignment_Contextmenu - Fatal编程技术网

C# 如何将关联菜单与右下角对齐?

C# 如何将关联菜单与右下角对齐?,c#,wpf,alignment,contextmenu,C#,Wpf,Alignment,Contextmenu,我有下面的代码,用于打开矩形的上下文菜单: private void RectBtn_MouseDown(object sender, MouseButtonEventArgs e) { var cm = ContextMenuService.GetContextMenu(sender as DependencyObject); if (cm == null) return; else { cm.Placement = Placem

我有下面的代码,用于打开
矩形的上下文菜单

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;
    }
}
因此,我的上下文菜单出现时如下所示:

有没有一种方法可以从代码后面实现下面的外观(保留上面的代码)


我在上查看了解决方案,但我需要从代码背后实现它。任何帮助都将不胜感激。

您的代码与您发布的图像不一致。您可以设置
底部
位置,但在屏幕截图上,关联菜单位于目标的顶部

无论如何,您可以使用
自定义
放置并手动计算位置:

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;
}

您的代码与您发布的图像不对应。您可以设置
底部
位置,但在屏幕截图上,关联菜单位于目标的顶部

无论如何,您可以使用
自定义
放置并手动计算位置:

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个并排的控件(即矩形),每个控件都有相同的高度和宽度。。有没有办法让他们的上下文菜单出现在某个区域?我的意思是,假设一个网格的宽度是400,现在,在它的底部,我添加了4个宽度为100px的矩形…那么,有没有一种方法,所有的上下文菜单都会出现在它们上面,但会被卡在网格/网格区域内@扎克雷扬,这是另一个问题。请分开问,为什么?主题是一样的……你知道答案还是至少给我一些线索或一些基本想法?@zackraiyan,因为。我编辑了我的代码……我也会尝试你的代码……但最后一个问题……例如,我有4个并排的控件(即矩形),每个控件都有相同的高度和宽度。。有没有办法让他们的上下文菜单出现在某个区域?我的意思是,假设一个网格的宽度是400,现在,在它的底部,我添加了4个宽度为100px的矩形…那么,有没有一种方法,所有的上下文菜单都会出现在它们上面,但会被卡在网格/网格区域内@扎克雷扬,这是另一个问题。请分开问,为什么?主题是一样的……你知道答案吗,或者至少给我一些线索或一些基本想法?@zackraiyan,因为。