我有一个“地址”父网格,其中有2个“地址”子网格:Origin
和Destination
。根据上下文,两个子网格可以一次显示,也可以仅显示其中一个,或者不显示。我想添加上下文菜单以启用将显示的地址复制到剪贴板。右键单击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模式)?