功能区XML下拉控件默认选择

时间:2018-03-12 08:28:42

标签: c# vsto

我是VSTO的新手,我尝试使用一些简单的控件创建Excel功能区。我知道有两种方法可以在Visual Studio中执行此操作。功能区XML和功能区设计器,从我读过的内容来看,大多数人更喜欢XML方法,因为它提供了更大的灵活性。

我尝试了两种创建带有标签和下拉列表的简单功能区的方法。使用Ribbon设计器,我可以看到生成的C#"代码背后"我可以用它来改变运行时的控件。此外,下拉列表会自动默认为第一个项目,但使用生成的C#对象,我可以将其设置为我想要的任何内容。

我尝试对XML方法做同样的事情,这是XML:

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
  <ribbon>
    <tabs>
      <tab id="myTab" label = "My Tab" >
        <group id="MyGroup" label="My Group" >
          <dropDown id="dropDown" label="Items">
            <item id="item1" label="Item 1" />
            <item id="item2" label="Item 2" />
            <item id="item3" label="Item 3" />
          </dropDown>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

但有了这个,组合框没有得到默认项目,它只是空的。并且没有可见的&#34;代码背后&#34;或我可以使用的数据绑定?如何为此控件设置默认项目(例如id = item1)。

图片清晰

无默认项目:

Not Initialized

有默认项目:

Initialized

提前谢谢

1 个答案:

答案 0 :(得分:1)

Ribbon Ribbon中定义的任何回调都将在Ribbon加载时自动执行(唯一需要特别初始化的是对Ribbon本身的引用)。因此,如果要使用其ID指定默认值,请在下拉列表定义中包含该回调。或者,您可以按索引进行选择。

分配给getSelectedItemID(或getSelectedItemIndex)的字符串是应该执行的过程的名称。

密切关注功能区回拨的方法签名。对于C#getSelectedItemId,需要返回string; getSelectedItemIndex int。您可以在文章系列Customizing the 2007 Office Fluent Ribbon for Developers

的第3部分中找到方法签名列表
     // Ribbon1.xml
      <dropDown id ="dd1" getSelectedItemID="InitializeDropdown" >
        <item id="ddItem1" label="Item 1"/>
        <item id="ddItem2" label="Item 2"/>
      </dropDown>

    // Ribbon1.cs
    public void Ribbon_Load(Office.IRibbonUI ribbonX)
    {
        ribbon = ribbonX;
    }

    //will be executed automatically when Ribbon_Load runs
    public string InitializeDropdown(Office.IRibbonControl ctl)
    {
        return "ddItem2";
    }