【发布时间】:2014-12-03 11:06:59
【问题描述】:
我对菜单命令有一个奇怪的问题。
我想创建一个在某些条件下有效但在其他条件下无效的菜单命令(例如:关闭命令在打开特定实体时有效,但在没有此类实体时无效)
我尝试了两种策略:
覆盖处理程序的
isEnabled()方法以包含应该告诉它命令是否处于活动状态的逻辑扩展一个
AbstractSourceProvider监听状态并更改提供的变量。
在这两种方法中,代码都可以正常工作,菜单贡献被激活和停用。但是,这就是问题所在,只有当我切换到另一个应用程序(alt tab 到别的东西)并切换回来时,它才会这样做。如果不执行此切换,则仅命令处于非活动状态,但菜单贡献仍将其显示为活动状态,从而导致 NotEnabledException。
SourceProviderApproach 扩展点如下所示:
<extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="menu:org.eclipse.ui.main.menu?before=window">
<menu
label="File">
<command
commandId="profile.close"
label="Close"
style="push">
<activeWhen
checkEnabled="false">
<with
variable="profile.gui.ActiveProfile">
<equals
value="active">
</equals>
</with>
</activeWhen>
</command>
</menuContribution>
</extension>
如果我将其更改为 validWhen 一切正常,则该命令会显示并相应地隐藏。但如果我将其切换到activeWhen,则会出现上述情况,我必须切换到另一个应用程序并返回,以便该菜单贡献显示为活动或非活动。
我还花了 4 个小时调试 Eclipse 代码,试图找出问题所在,但我什么也没找到。
其他人是否遇到过这种情况并找到了解决方法?
谢谢, 米海
【问题讨论】: