如何在visual studio 2013的主窗口框架控制窗格中添加按钮?

时间:2015-01-20 13:07:12

标签: c# wpf visual-studio visual-studio-2013 visual-studio-extensions

我想为我的Isolated shell应用程序添加一个按钮到Visual Studio 2013中的主框架控件窗格。我不确定窗格是否被调用"主窗口框架控件",但它是菜单,其中VS 2013具有通知,快速启动和反馈按钮。

如何使用我的扩展程序向该菜单添加按钮?

enter image description here

1 个答案:

答案 0 :(得分:1)

包含控件注册的注册表项位于[ver]_Config\MainWindowFrameControls

搜索VS的DLL(使用Telerik的JustDecompile,主要是功能性全文搜索),用于" MainWindowFrameControls"调高FrameControlManager(在Microsoft.VisualStudio.Shell.UI.Internal程序集和Microsoft.VisualStudio.PlatformUI名称空间中)。这会迭代注册表项,通过调用其FrameControl方法为每个注册表创建一个ReadRead方法从注册表项中填充一些属性,包括其_factoryBundle字段。它包含视图工厂的GUID,视图ID和数据源ID(从注册表项中读取)将用于创建控件。

FrameControl' FrameworkElement属性(几乎可以肯定是实际显示在框架上的部分)懒惰地调用UIFactoryHelper.CreateElementAndDataSource(),并将_factoryBundle传递给它}。这最终会调用WindowHelper.CreateUIElement,然后将其移交给IVsUiFactory。最后,我们已经达到VS的一个(轻微)记录部分 - 这是公共界面的一部分。

事实证明,帧控件的视图GUID指的是" UI提供商之一" registered by a package。 (这些也可以在注册表中的_Config\UIProviders键下看到。)

简而言之,您需要实现IVsUiFactory接口并将其注册到IVsRegisterUIFactories服务,然后使用C#公开(例如,使用.pkgdef或更干净)为您执行注册表操作的自定义属性)MainWindowFrameControls中控件的注册表项下的相应值。这将允许您创建一个放置在主窗口框架中的自定义WPF框架元素。

我没有查看数据绑定,但显然这也是可能的 - 只需跟踪FrameControl代码,直到找到它是如何工作的(使用一个好的反编译器 - 我喜欢JustDecompile用于全文搜索,dotPeek用于其界面。


P.S。嘿,另一个孤立的shell开发者!嗨&祝你好运: - )

相关问题