如何在 WPF 中的上下文菜单和常规菜单之间共享菜单定义

Sha*_*owe 2 .net wpf xaml

我有一个已定义的 MenuItem,我想在一个页面上的两个不同菜单之间共享它。该菜单包含两个菜单之间相同的功能,我不想要它的两个副本。无论如何要在 Page.Resources 中定义一个 MenuItem 并在下面的 ContextMenu XAML 中引用它?

<Page.Resources>
    <MenuItem x:Key="123"/>
</Page.Resources>

<ContextMenu>
    <MenuItem>Something hardcoded</MenuItem>

    <!-- include shared menu here -->

</ContextMenu>
Run Code Online (Sandbox Code Playgroud)

Mat*_*ton 5

我通过在菜单项本身上设置 x:Shared="False" 来做到这一点。默认情况下,资源在使用它们的每个地方之间共享(意味着所有使用中的一个实例),因此关闭它意味着每次都会制作资源的新“副本”。

所以:

<MenuItem x:Key="myMenuItem" x:Shared="False" />
Run Code Online (Sandbox Code Playgroud)

您仍然会得到它的“副本”,但您只需要在一个地方定义它。看看是否有帮助。您可以在菜单定义中像这样使用它:

<StaticResource ResourceKey="myMenuItem" />
Run Code Online (Sandbox Code Playgroud)