2
我想在VS 2010的解決方案資源管理器中爲.cs文件添加一個上下文菜單項?我可以將它添加到項目,但不僅僅是.cs文件?任何幫助,將不勝感激。在Visual Studio解決方案資源管理器中將菜單項添加到.cs文件(僅)?
我想在VS 2010的解決方案資源管理器中爲.cs文件添加一個上下文菜單項?我可以將它添加到項目,但不僅僅是.cs文件?任何幫助,將不勝感激。在Visual Studio解決方案資源管理器中將菜單項添加到.cs文件(僅)?
在您的OnBeforeQueryStatus
方法中,您需要獲取當前選定的對象並確定文件類型,然後可以設置MenuCommand
的Visible屬性。
要啓用OnBeforeQueryStatus
您需要將以下屬性添加到您的包:
[ProvideAutoLoad(Microsoft.VisualStudio.Shell.Interop.UIContextGuids.SolutionExists)]
public sealed class YourPackage : Package
然後在你的命令構造函數,你需要將回調綁定到BeforeQueryStatus
:
...
var commandService = this.ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
if (commandService == null) return;
var menuCommandId = new CommandID(CommandSet, CommandId);
var menuItem = new OleMenuCommand(this.MenuItemCallback, menuCommandId);
menuItem.BeforeQueryStatus +=
new EventHandler(OnBeforeQueryStatus);
commandService.AddCommand(menuItem);
...
OnBeforeQueryStatus:
private void OnBeforeQueryStatus(object sender, EventArgs e)
{
var myCommand = sender as OleMenuCommand;
if (null == myCommand) return;
var selectedObject = Util.GetProjectItem();
myCommand.Visible = selectedObject.Name.EndsWith(".cs") && this.Enabled;
}
GetProjectItem:
public static ProjectItem GetProjectItem()
{
IntPtr hierarchyPointer, selectionContainerPointer;
Object selectedObject = null;
IVsMultiItemSelect multiItemSelect;
uint projectItemId;
var monitorSelection =
(IVsMonitorSelection)Package.GetGlobalService(
typeof(SVsShellMonitorSelection));
monitorSelection.GetCurrentSelection(out hierarchyPointer,
out projectItemId,
out multiItemSelect,
out selectionContainerPointer);
var selectedHierarchy = Marshal.GetTypedObjectForIUnknown(
hierarchyPointer,
typeof(IVsHierarchy)) as IVsHierarchy;
if (selectedHierarchy != null)
{
ErrorHandler.ThrowOnFailure(selectedHierarchy.GetProperty(
projectItemId,
(int)__VSHPROPID.VSHPROPID_ExtObject,
out selectedObject));
}
return selectedObject as ProjectItem;
}
,並與所有的,你應該只看到你的項目文件與.cs
結束這個問題可以幫助你按鈕http://stackoverflow.com/questions/3017063/visual-工作室-2010-插件 - 添加 - 一個上下文菜單到該解決方案資源管理器 – Ramesh