如何在 visual studio 2013 中向主 Window 框架控制面板添加按钮?
How to add a button to the Main Window Frame Control pane in visual studio 2013?
我想在 Visual Studio 2013 的主框架控制窗格中为我的独立 shell 应用程序添加一个按钮。我不确定窗格是否被调用 "Main Window Frame Control",但是这是 VS 2013 具有通知、快速启动和反馈按钮的菜单。
如何使用我的扩展程序向该菜单添加按钮?
包含控件注册的注册表项位于 [ver]_Config\MainWindowFrameControls
。
搜索 VS 的 DLL(使用 Telerik 的 JustDecompile,它主要具有全文搜索功能)"MainWindowFrameControls" 出现 FrameControlManager
(在 Microsoft.VisualStudio.Shell.UI.Internal 程序集和 Microsoft.VisualStudio.PlatformUI
命名空间)。这会迭代注册表项,通过调用其 Read
方法为每个填充的注册表项创建一个 FrameControl
。 Read
方法从注册表项填充一些属性,包括它的 _factoryBundle
字段。这包含将用于创建控件的视图工厂的 GUID、视图 ID 和数据源 ID(从注册表项中读取)。
FrameControl
的 FrameworkElement
属性(这几乎肯定是实际显示在框架上的部分)懒惰地调用 UIFactoryHelper.CreateElementAndDataSource()
,将 UIFactoryHelper.CreateElementAndDataSource()
传递给它 _factoryBundle
。这最终会调用 WindowHelper.CreateUIElement
,它会依次将其交给 IVsUiFactory
。最后,我们到达了 VS 的(轻微)文档化部分——这是 public 接口的一部分。
原来框架控件的视图GUID指的是"UI Providers"registered by a package之一。 (这些也可以在注册表中的 _Config\UIProviders
项下看到。)
简而言之,您需要实现 IVsUiFactory
接口并将其注册到 IVsRegisterUIFactories
服务,然后公开(例如,使用 .pkgdef 或更干净地使用 C#为您执行注册表操作的自定义属性)MainWindowFrameControls
中您控件的注册表项下的相应值。这将允许您创建一个自定义 WPF 框架元素,该元素放置在主 window 框架中。
我没有研究数据绑定,但显然这也是可能的 - 只需跟踪 FrameControl
代码直到你发现它是如何工作的(使用一个好的反编译器 - 我喜欢 JustDecompile 的组合它的全文搜索,以及它的界面的 dotPeek)。
P.S。嘿,另一个孤立的 shell 开发者!你好,祝你好运:-)
我想在 Visual Studio 2013 的主框架控制窗格中为我的独立 shell 应用程序添加一个按钮。我不确定窗格是否被调用 "Main Window Frame Control",但是这是 VS 2013 具有通知、快速启动和反馈按钮的菜单。
如何使用我的扩展程序向该菜单添加按钮?
包含控件注册的注册表项位于 [ver]_Config\MainWindowFrameControls
。
搜索 VS 的 DLL(使用 Telerik 的 JustDecompile,它主要具有全文搜索功能)"MainWindowFrameControls" 出现 FrameControlManager
(在 Microsoft.VisualStudio.Shell.UI.Internal 程序集和 Microsoft.VisualStudio.PlatformUI
命名空间)。这会迭代注册表项,通过调用其 Read
方法为每个填充的注册表项创建一个 FrameControl
。 Read
方法从注册表项填充一些属性,包括它的 _factoryBundle
字段。这包含将用于创建控件的视图工厂的 GUID、视图 ID 和数据源 ID(从注册表项中读取)。
FrameControl
的 FrameworkElement
属性(这几乎肯定是实际显示在框架上的部分)懒惰地调用 UIFactoryHelper.CreateElementAndDataSource()
,将 UIFactoryHelper.CreateElementAndDataSource()
传递给它 _factoryBundle
。这最终会调用 WindowHelper.CreateUIElement
,它会依次将其交给 IVsUiFactory
。最后,我们到达了 VS 的(轻微)文档化部分——这是 public 接口的一部分。
原来框架控件的视图GUID指的是"UI Providers"registered by a package之一。 (这些也可以在注册表中的 _Config\UIProviders
项下看到。)
简而言之,您需要实现 IVsUiFactory
接口并将其注册到 IVsRegisterUIFactories
服务,然后公开(例如,使用 .pkgdef 或更干净地使用 C#为您执行注册表操作的自定义属性)MainWindowFrameControls
中您控件的注册表项下的相应值。这将允许您创建一个自定义 WPF 框架元素,该元素放置在主 window 框架中。
我没有研究数据绑定,但显然这也是可能的 - 只需跟踪 FrameControl
代码直到你发现它是如何工作的(使用一个好的反编译器 - 我喜欢 JustDecompile 的组合它的全文搜索,以及它的界面的 dotPeek)。
P.S。嘿,另一个孤立的 shell 开发者!你好,祝你好运:-)