/// <summary> /// 向插件窗口的RibbonControl控件加载插件 /// </summary> /// <param name="container"></param> /// <param name="ribbonCtrl"></param> private static void LoadPluginContainer(this IPluginContainer container, RibbonControl ribbonCtrl) { var form = ribbonCtrl.FindForm(); var imageCollection = ribbonCtrl.Images == null ? new ImageCollection() : (ImageCollection)ribbonCtrl.LargeImages; ribbonCtrl.LargeImages = imageCollection; foreach (var pageContainer in container.SubContainers) { var page = new RibbonPage { Text = pageContainer.Text, Name = pageContainer.Name }; ribbonCtrl.DefaultPageCategory.Pages.Add(page); foreach (var groupContainer in pageContainer.SubContainers) { var group = new RibbonPageGroup { Text = groupContainer.Text, Name = groupContainer.Name }; page.Groups.Add(group); var plugins = groupContainer.Plugins.OrderBy(v => v.Index); foreach (var plugin in plugins) { var image = plugin.GetImage(); int imageIndex = image == null ? -1 : imageCollection.Images.Add(image); var item = new BarButtonItem { Caption = plugin.Text, SuperTip = SuperTipsEx.CreateSuperTips(plugin.Tips, plugin.Text), RibbonStyle = RibbonItemStyles.All, LargeImageIndex = imageIndex, Tag = plugin }; if (!string.IsNullOrWhiteSpace(plugin.ShortcutKeys)) { item.ItemShortcut = new BarShortcut((Keys)Enum.Parse(typeof(Keys), plugin.ShortcutKeys)); } item.ItemClick += (sender, e) => plugin.Command.Invoke(form); group.ItemLinks.Add(item); } } } }
/// <summary> /// 根据插件创建调用插件的<see cref="BarButtonItem"/> /// </summary> /// <typeparam name="TCmdData"></typeparam> /// <param name="plugin"></param> /// <param name="imageCollection"></param> /// <param name="caller"></param> /// <param name="cmdData"></param> /// <returns></returns> private static BarButtonItem PluginToButtonItem <TCmdData>(IPluginItem plugin, ImageCollection imageCollection, object caller, string imageDir, TCmdData cmdData) { var bitmap = plugin.GetIcon(imageDir); int imageIndex = bitmap == null ? -1 : imageCollection.Images.Add(bitmap); var item = new BarButtonItem { Caption = plugin.Text, SuperTip = SuperTipsEx.CreateSuperTips(plugin.Tips, plugin.Text), RibbonStyle = RibbonItemStyles.All, LargeImageIndex = imageIndex, Tag = plugin, Visibility = plugin.Visible ? BarItemVisibility.Always : BarItemVisibility.Never, }; if (!string.IsNullOrWhiteSpace(plugin.ShortcutKeys)) { item.ItemShortcut = new BarShortcut((Keys)Enum.Parse(typeof(Keys), plugin.ShortcutKeys)); } plugin.CreateCommand(cmdData); item.ItemClick += (sender, e) => plugin.Command?.Invoke(caller); return(item); }