如何隐藏其子项被隐藏的菜单?

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 为假,如何隐藏菜单项?

vb 如何隐藏菜单栏,VB高手进、、、、、、、、、、、、、、、、、

具有“溢出:隐藏”溢出祖父母边距的 Flexbox 子项

在制表器中显示/隐藏或切换嵌套表子项