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

时间:2008-09-29 19:02:59

标签: .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>

3 个答案:

答案 0 :(得分:4)

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

所以:

<MenuItem x:Key="myMenuItem" x:Shared="False" />

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

<StaticResource ResourceKey="myMenuItem" />

答案 1 :(得分:1)

因为你想混合搭配...我会创建一个自定义控件,它继承自ContextMenu,它具有“SharedMenuItems”依赖属性和MenuItems依赖属性。这样您的控件就可以决定如何将这两个集合在一起。如果您想要一个这样的例子,请告诉我。

答案 2 :(得分:0)

许多选择: a)将ContextMenu或Menu数据绑定到相同的底层集合,并使用项目模板等工作 b)使用命令和数据绑定到一组命令绑定