【问题标题】:Identify the location of the ContextMenu in a Canvas?确定 ContextMenu 在 Canvas 中的位置?
【发布时间】:2012-03-08 16:07:55
【问题描述】:

我有一个关联到画布的 ContextMenu

<UserControl>
  <Grid myGrid>
    <Canvas myCanvas>
      <ContextMenu myMenu />...

我单击了一个 menuItem 条目,并希望在此位置插入一个控件(标签、myLabel)。

我应该如何设置 myLabel 的坐标,以便它对应于鼠标右键单击(ContextMenu 实际“位置”)?..

【问题讨论】:

    标签: .net wpf wpf-controls


    【解决方案1】:

    您可以使用 ContextMenu 的 TranslatePoint 方法,例如在 MenuItem 的 Click 事件处理程序中,如下所示:

    Point location = myMenu.TranslatePoint(new Point(), myCanvas);
    

    其中 myMenu 是 ContextMenu:

    <UserControl> 
        <Grid ...> 
            <Canvas ...> 
                <ContextMenu Name=myMenu />... 
    

    以下是如何从 MenuItem 的 Click 事件的发送方获取 ContextMenu:

    FrameworkElement parent = sender as FrameworkElement;
    while (parent != null && !(parent is ContextMenu))
    {
        parent = parent.Parent as FrameworkElement;
    }
    

    【讨论】:

    • 点击的发送者是MenuItem,而不是ContextMenu...所以不知道怎么找到ContextMenu...
    • 可以设置ContextMenu的Name属性。
    • 是的,但是如果我在某些情况下出现在同一个画布上的 2 个上下文菜单...)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 2022-06-14
    • 1970-01-01
    相关资源
    最近更新 更多