子元素上的上下文菜单也将显示父上下文菜单

时间:2019-06-26 19:13:36

标签: wpf xaml mvvm contextmenu

我有一个“地址”父网格,其中有2个“地址”子网格:OriginDestination。根据上下文,两个子网格可以一次显示,也可以仅显示其中一个,或者不显示。我想添加上下文菜单以启用将显示的地址复制到剪贴板。右键单击origin地址应显示“复制原始地址”菜单,右键单击destination地址应显示“复制目标地址”菜单,但我也想允许用户一次复制两个地址,因此也应显示一个地址,并显示附加菜单“复制两个地址”。

我的第一个尝试是通过在主网格中添加“复制两个地址”上下文菜单,然后分别在每个子网格中添加“复制x地址”,如下所示:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <Grid.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Copy both addresses" />
        </ContextMenu>
    </Grid.ContextMenu>

    <!-- Origin -->
    <Grid Grid.Row="0">
        <Grid.ContextMenu>
            <ContextMenu>
                <MenuItem Header="Copy origin addresses" />
            </ContextMenu>
        </Grid.ContextMenu>
        <TextBlock Text="Origin" />
    </Grid>

    <!-- Destination -->
    <Grid Grid.Row="1">
        <Grid.ContextMenu>
            <ContextMenu>
                <MenuItem Header="Copy destination addresses" />
            </ContextMenu>
        </Grid.ContextMenu>
        <TextBlock Text="Destination" />
    </Grid>
</Grid>

我当时想将孩子的上下文菜单添加(合并)到父上下文菜单中,并同时显示两者,这是错误的。看来,子元素上的上下文菜单会覆盖父元素上的所有上下文菜单。

因此,我尝试了一种更手动和更混乱的方法,即使用当前的复制菜单和复制两个菜单将CompositeCollection的{​​{1}} s添加到每个子网格,如下所示:

MenuItem

但是这里的问题是,正如所说的,这两个地址并不总是都会显示,在这种情况下,我根本不想显示“复制两个地址”。

我该如何做到这一点(使用MVVM模式)?

0 个答案:

没有答案