如何在WPF中的上下文菜单和常规菜单之间共享菜单定义
时间:2020-03-06 14:53:27 来源:igfitidea点击:
我有一个已定义的MenuItem,我想在一页上的两个不同菜单之间共享。该菜单包含的功能在两个菜单之间都相同,因此我不希望它有两个副本。无论如何,有没有在Page.Resources中定义MenuItem并在下面的ContextMenu XAML中引用它?
<Page.Resources> <MenuItem x:Key="123"/> </Page.Resources> <ContextMenu> <MenuItem>Something hardcoded</MenuItem> <!-- include shared menu here --> </ContextMenu>
解决方案
因为我们要混合和匹配...,所以我将创建一个自定义控件,该控件继承自具有" SharedMenuItems"依赖属性和MenuItems依赖属性的ContextMenu。这样,控件可以决定如何将这两个集合合并在一起。如果我们想举个例子,请告诉我。
我通过在菜单项本身上设置x:Shared =" False"来完成此操作。默认情况下,资源在每个使用它们的地方之间共享(意味着所有用途中都有一个实例),因此将其关闭意味着每次都将对资源进行新的"复制"。
所以:
<MenuItem x:Key="myMenuItem" x:Shared="False" />
我们仍然会得到它的"副本",但是只需要在一个地方定义它即可。看看是否有帮助。我们可以在菜单定义中像这样使用它:
<StaticResource ResourceKey="myMenuItem" />
多种选择:
a)将ContextMenu或者Menu绑定到相同的基础集合,并使用项目模板等进行工作
b)使用命令,并将其数据绑定到一组命令绑定