代码之家  ›  专栏  ›  技术社区  ›  DoubleTrouble

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

  •  3
  • DoubleTrouble  · 技术社区  · 6 年前

    我是VSTO新手,正在尝试使用一些简单的控件创建Excel功能区。我知道在Visual Studio中有两种方法可以做到这一点。Ribbon XML和Ribbon Designer,据我所知,大多数人更喜欢XML方法,因为它提供了更多的灵活性。

    我尝试了两种方法来创建一个带有选项卡和下拉菜单的简单功能区。使用Ribbon designer,我可以看到生成的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>
    

    但是使用这个组合框不会得到默认项,它只是空的。并且没有我可以使用的可见的“代码隐藏”或数据绑定?如何为此控件设置默认项(例如id=item1)。

    清晰的图片

    无默认项:

    Not Initialized

    具有默认项:

    Initialized

    提前谢谢你

    1 回复  |  直到 6 年前
        1
  •  3
  •   Cindy Meister Prabhuprasad NG    6 年前

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

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

    密切关注 方法签名 的功能区回调。对于C# getSelectedItemId 需要返回 string ; getSelectedItemIndex int 。您将在本系列文章的第3部分中找到方法签名列表 Customizing the 2007 Office Fluent Ribbon for Developers

         // 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";
        }