【问题标题】:Open a Custom Tool Window on Visual Studio without calling it from the View menu在 Visual Studio 上打开自定义工具窗口,而不从“视图”菜单中调用它
【发布时间】:2016-10-27 19:49:05
【问题描述】:

我已经看到,通过 Visual Studio 的可扩展性工具,您可以添加自定义命令,例如灯泡、工具窗口(如属性面板)等...

基本上,我正在尝试创建一个自定义工具窗口,该窗口不是从 View -> Other Windows menu 而是从我在自己的 UI 上创建的按钮打开的。 为此,我尝试创建一个基本上调用我的 PaneResultsPackage 类的委托,然后调用应该触发所有逻辑的 Initialize() 方法。但是,它不会生成窗格,因为包对象似乎是空的。

这基本上是类:

    [PackageRegistration(UseManagedResourcesOnly = true)]
    [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)] // Info on this package for Help/About
    [ProvideMenuResource("Menus.ctmenu", 1)]
    [ProvideToolWindow(typeof(ResourceAnalysisPaneResults))]
    [Guid(ResourceAnalysisPaneResultsPackage.PackageGuidString)]
    [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1650:ElementDocumentationMustBeSpelledCorrectly", Justification = "pkgdef, VS and vsixmanifest are valid VS terms")]
    public sealed class ResourceAnalysisPaneResultsPackage : Package
    {
        /// <summary>
        /// ResourceAnalysisPaneResultsPackage GUID string.
        /// </summary>
        public const string PackageGuidString = "29677396-e861-4672-804e-75cc557f1874";

        /// <summary>
        /// Initializes a new instance of the <see cref="ResourceAnalysisPaneResults"/> class.
        /// </summary>
        public ResourceAnalysisPaneResultsPackage()
        {
            // Inside this method you can place any initialization code that does not require
            // any Visual Studio service because at this point the package object is created but
            // not sited yet inside Visual Studio environment. The place to do all the other
            // initialization is the Initialize method.
        }

        #region Package Members

        /// <summary>
        /// Initialization of the package; this method is called right after the package is sited, so this is the place
        /// where you can put all the initialization code that rely on services provided by VisualStudio.
        /// </summary>
        protected override void Initialize()
        {
            ResourceAnalysisPaneResultsCommand.Initialize(this);
            base.Initialize();
        }

        ** Here is the call to the delegate**
        public void OnSchemaAnalyzed(object source, EventArgs e)
        {
            Initialize();
        }

        #endregion
    }

除了用于我创建的委托的 OnSchemaAnalyzed 方法之外,所有这些代码都是预先填充的。

如果不通过 View -> Windows 选项卡调用它,我如何才能拥有一个不包含空属性的包对象?

那么正确的方法是什么?

【问题讨论】:

    标签: c# visual-studio-2015 visual-studio-extensions visual-studio-addins visual-studio-package


    【解决方案1】:

    您不应自己调用 Initialize - Visual Studio 在实例化您的包时会自动调用它。

    要显示工具窗口,请查看在向项目中添加工具窗口时默认创建的 ShowToolWindow 方法:

    ToolWindowPane window = this.package.FindToolWindow(typeof(ResourceAnalysisPaneResults), 0, true);
    IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame;
    windowFrame.Show();
    

    【讨论】:

    • 您是说我应该将该代码放在我的 OnSchemaAnalyzed 中,而不是调用 Initialize();方法?
    • @user3587624 是的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 2018-06-15
    • 2015-08-14
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多