C#VSTO-动态设置RibbonControl

C#VSTO-动态设置RibbonControl,c#,combobox,vsto,ribbon-control,C#,Combobox,Vsto,Ribbon Control,我在Word中定制了一条丝带。功能区有一个组合框:组合框\u recentConditions,它是使用设计器定义的-因此它是初始化的,在加载时为空。现在,我想在每次启动应用程序\u WindowActivate事件时动态设置此组合框 每个Word文档都有自己的类实例,名为RibbonControl: class RibbonControls { private RibbonComboBox recentConditionComboBox; public RibbonContr

我在Word中定制了一条丝带。功能区有一个组合框:组合框\u recentConditions,它是使用设计器定义的-因此它是初始化的,在加载时为空。现在,我想在每次启动应用程序\u WindowActivate事件时动态设置此组合框

每个Word文档都有自己的类实例,名为RibbonControl

class RibbonControls
{
    private RibbonComboBox recentConditionComboBox;

    public RibbonControls()
    {
        this.recentConditionComboBox = new RibbonComboBox();
    }

    public RibbonComboBox RecentConditionComboBox
    {
        get
        {
            return recentConditionComboBox;
        }
        set
        {
            recentConditionComboBox = value;
        }
    }
}
现在,在应用程序窗口激活事件中,我执行以下操作:

    static void Application_WindowActivate(Document doc, Window Wn)
    {
        Globals.Ribbons.SourceRibbon.comboBox_recentConditions = WordGate.docRibbonControls.RecentConditionComboBox; 
    }
问题在于,功能区组合框控件不会更改,即使在调用应用程序\u WindowActivate之后,它也始终为空。 我在运行时进行了测试,以查看每个文档是否确实有自己的组合框及其项,这似乎是可行的。 我错过了什么

要澄清我的问题: 假设我在comboBox.items中有3项。单击它时,我看不到任何内容,但如果我添加以下内容:

MessageBox.Show(Globals.Ribbons.SourceRibbon.comboBox_recentConditions.Items.Count.ToString());
应用程序\u WindowActivate
的末尾,它将打印数字3


谢谢。

你不能那样做。请仔细阅读


您必须使用getItemLabel事件,该事件将向组合框添加项目。如果要在WindowActivate期间加载组合框,请调用或调用所有相关的功能区回调。

我尝试了:Globals.Ribbons.SourceRibbon.RibbonUI.InvalidateControl(“组合框\最新条件”);Globals.Ribbons.SourceRibbon.RibbonUI.Invalidate();但它不起作用。它应该是全局的。ThisAddin.Ribbon.Invalidate()功能区在ThisAddin中不存在。它应该是基于上面代码的功能区类名RibbonControls@Kiru:调用myRibbon.RibbonUI.Invalidate();不适合我。猜猜看?