What I want to do is to add some WPF controls of an assembly to the Visual Studio 2013 Toolbox. I don't want to do this manualy. Instead I want to creat a vsix project. The resulting installer should add the controls.
What I have done succesfully adding Controls which are in the same assembly by adding an RegistrationAttribute. But in my case I want to add controls of other assemblies dynamicly.
It would be perfect if I can do something like this: Create a vs Package and add the following class:
[PackageRegistration(UseManagedResourcesOnly = true)] [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)] [Guid(GuidList.guidControls_VSPackagePkgString)] [ProvideToolboxItems(1)] public sealed class Controls_VSPackagePackage : Package//, IVsInstalledProduct { #region Private Constants /// <summary> /// File name of the assembly to be integrated. /// </summary> private const string ComponentFile = "WpfControlLibrary1.dll"; /// <summary> /// Toolbox tab name to be created. /// </summary> private const string TabName = "Test Tab"; #endregion #region Public Constructors public Controls_VSPackagePackage() { ToolboxInitialized += OnToolboxInitialized; ToolboxUpgraded += OnToolboxUpgraded; } #endregion #region Private Methods /// <summary> /// Called when Visual Studio Toolbox is initialized. /// </summary> private void OnToolboxInitialized(object sender, EventArgs eventArgs) { RemoveToolboxItems(); InstallToolboxItems(); } /// <summary> /// Called when Visual Studio Toolbox is updated. /// </summary> private void OnToolboxUpgraded(object sender, EventArgs eventArgs) { InstallToolboxItems(); } /// <summary> /// Install toolbox items from assembly to Toolbox. /// </summary> private void InstallToolboxItems() { IToolboxService toolboxService = (IToolboxService)GetService(typeof(IToolboxService)); var types = GetAssembly().GetTypes(); // types[0] is our userControl var item = new ToolboxItem(types[0]); item.DisplayName = "Test"; toolboxService.AddToolboxItem(item); } /// <summary> /// Remove toolbox items contained in assembly from Toolbox. /// </summary> private void RemoveToolboxItems() { IToolboxService toolboxService = (IToolboxService)GetService(typeof(IToolboxService)); var types = GetAssembly().GetTypes(); var item = new ToolboxItem(types[0]); toolboxService.RemoveToolboxItem(item); } /// <summary> /// Get AssemblyName of the assembly to integrate. /// </summary> private Assembly GetAssembly() { string pathAssembly = String.Concat( Path.GetDirectoryName(GetType().Assembly.Location), Path.DirectorySeparatorChar, ComponentFile); return Assembly.LoadFrom(pathAssembly); } #endregion }
This works fine for Windows Forms but not for WPF controls.
Is there a way to do something similar with wpf controls?