在Word Addin中动态添加RibbonButtons抛出集合是只读的

问题描述:

我对Word AddIns相当陌生并尝试添加功能区组。对于每个RibbonGroup,我动态添加RibbonMenu,然后将RibbonButton添加到组内的菜单。在Word Addin中动态添加RibbonButtons抛出集合是只读的

我得到了对地表的工作,这似乎是okie但每当我访问任何收集

如:group1.Items.add(新RibbonButton());它引发我说集合是只读的。

但是,当我调试集合的IsReadOnly标志设置为False这明确告诉该集合不是只读?

我在想什么。

当您的功能区加载后,该集合将变为只读。

要动态修改功能区控件,您需要在功能区构造函数中执行该功能。

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

您是否试图将按钮添加到RibbonMenu或RibbonGroup? 在你的描述中你曾经说过你想在菜单中添加按钮,但是你引用的例子是试图给一个功能区组添加一个按钮[我假设组1是一个组而不是菜单!

您应该可以将按钮添加到RibbonMenu,但是如果它是RibbonGroup,那么您的运气不好。
下面是在RibbonGroup项目属性的代码注释:

// 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。
设计人员需要能够在创建功能区时修改功能区组中的项目,但一旦装入功能区后,您无法对其进行任何修改。

注:如果你想按钮添加到RibbonMenu上的苍蝇,设置动态为True您RibbonMenu项目属性窗口(或者你可以把它在设计代码),否则你会碰到同样的例外。

+0

您是绝对正确的。我的要求是通过在同一文档中阅读一些CustomXmlPart动态地添加组。因此,我遇到了两个问题: 1:InvalidOperationException,因为一旦功能区加载后就无法将组添加到选项卡。 (就像你说的) 2.一种方法是在构造函数中添加逻辑(一些博客建议这样做)。但在构造函数中,我无法读取我的CustomXmlPart:((。任何想法为了实现目标做一些工作? – WPFKK

+0

现在我改变了主意,动态地添加MenuItems,但是如果我可以添加组,这将是伟大的:) – WPFKK