如何隐藏其子项被隐藏的菜单?
Posted
技术标签:
【中文标题】如何隐藏其子项被隐藏的菜单?【英文标题】:How do I hide Menu whose children are hidden? 【发布时间】:2015-07-14 11:14:16 【问题描述】:我在 Eclipse 4 应用程序项目的主菜单上有一些菜单,它们的子项是在来自不同插件的片段的帮助下贡献的。我已根据登录用户对子菜单应用权限。 我的问题是即使在菜单的子菜单没有权限并且它们都不可见但菜单仍然可见之后。我想隐藏那个菜单。任何建议。
更新:我的模型处理器和 plugin.xml 类
public class MenuProcessor
public MenuProcessor()
@Execute
public void execute(@Named("application_luna.menu.contract(fo)") MMenu menu)
if(menu.getChildren().isEmpty())
menu.setVisible(false);
<extension
id="com.swte.approval.ui.fragment"
point="org.eclipse.e4.workbench.model">
<fragment
uri="fragment.e4xmi">
</fragment>
<processor
apply="always"
beforefragment="false"
class="com.swte.approval.ui.MenuProcessor1">
<element
id="application_luna.menu.contract(fo)">
</element>
</processor>
`
【问题讨论】:
【参考方案1】:您可以通过菜单上的processor 来执行此操作。
您在 plugin.xml 中将处理器声明为“org.eclipse.e4.workbench.model”扩展点的一部分。
<extension
id="playerFragment"
point="org.eclipse.e4.workbench.model">
... other elmeents
<processor
beforefragment="false"
class="package.MenuProcessor">
<element
id="menu.id">
</element>
</processor>
</extension>
声明命名要运行的类和它适用的模型元素。
然后,处理器代码可以注入命名菜单,如果没有子菜单,则使其不可见。类似的东西(未测试):
public class MenuProcessor
@Inject @Named("menu.id")
private MMenu menu;
@Execute
public void execute()
if (menu.getChildren().isEmpty())
menu.setVisible(false);
注意:您必须将菜单元素作为字段注入到类中,将其指定为execute
方法的参数将不起作用。这是因为该元素只有在构造类时才可用于注入。
【讨论】:
先生,我收到以下消息:无法处理“MenuProcessor.menu”:未找到参数“MMenu[@javax.inject.Named(value=application_luna.menu.contract) 的实际值” (fo))]" 其中 MenuProcessor 是处理器的类 好吧,我处理了异常,但我认为模型处理器永远不会执行。我试着打印一些东西。任何建议。 在这里进行良好的测试。您必须向我们展示您的代码。 嗯,构造函数被触发了,但是execute方法没有被触发。 您必须将菜单作为我展示的类中的字段注入,而不是作为execute
方法的参数。菜单只有在类被构建时才可以注入。以上是关于如何隐藏其子项被隐藏的菜单?的主要内容,如果未能解决你的问题,请参考以下文章
WPF - 如果命令的 CanExecute 为假,如何隐藏菜单项?