3

我对 Word 插件相当陌生,并尝试添加功能区组。对于每个 RibbonGroup,我动态添加 RibbonMenu,然后将 RibbonButtons 添加到组内的菜单中。

我完成了艰苦的工作,看起来还不错,但是每当我访问任何收藏时

例如:group1.Items.add(new RibbonButton()); 它让我说 Collection 是只读的。

但是当我调试 Collection 的 IsReadOnly 标志设置为 False 时,这清楚地表明 Collection 不是只读的?

我错过了什么。

4

2 回答 2

7

加载功能区后,集合将变为只读。

要动态修改 Ribbon 控件,需要在 Ribbon 构造函数中进行。

请参阅http://msdn.microsoft.com/en-us/library/bb608623.aspx#SettingReadOnlyProperties

于 2012-11-12T18:52:23.573 回答
2

您是否要向 RibbonMenu 或 RibbonGroup 添加按钮?在您的描述中,您说过要向菜单添加按钮,但您引用的示例是尝试向功能区组添加按钮[我假设group1是组而不是菜单!]。

您应该能够向 RibbonMenu 添加按钮,但如果您想要的是 RibbonGroup,那么您就不走运了。
这是 RibbonGroup 中 Items 属性的代码注释:

// Summary:
//     Gets the controls in the group.
//
// Returns:
//     The collection of controls in the group.
//
// Exceptions:
//   System.InvalidOperationException:
//     You try to add, remove, or replace a Microsoft.Office.Tools.Ribbon.RibbonControl
//     after the Ribbon is loaded.
IList<RibbonControl> Items { get; }

这就是您收到错误的原因,这也是集合的 IsReadOnly 属性设置为 false 的原因。
Designer 在创建功能区时需要能够修改 RibbonGroup 中的项目,但是一旦加载,您就无法对其进行任何修改。

注意:如果您想在运行中向 RibbonMenu 添加按钮,请在 RibbonMenu 项目属性窗口中将Dynamic设置为 True(或者您可以将其放入 Designer 代码中),否则您将再次遇到相同的异常。

于 2012-05-18T08:48:13.993 回答