zoukankan      html  css  js  c++  java
  • VSTO中自定义XML功能区实现Ribbon控件互相更新

          一般在VSTO中,使用可视化编辑器来进行Ribbon功能区的开发,控件之间的引用和修改属性值与winform开发没有区别,是非常方便的,但为了实现更复杂的功能,不得不转到XML编辑器下的开发,但似乎控件间的互相访问就不是那么直接了,因为XML设计器使用了在fluent ui下大量的回调机制,也就是说,每个控件的属性的修改一定要通过回调方法,另一方面由于有缓存机制在,界面的更新还需要由InvalidateControl来触发。

          如下示例,展示了通过点击按钮修改label控件的值。

    <?xml version="1.0" encoding="UTF-8"?>
    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
      <ribbon>
        <tabs>
          <tab idMso="TabAddIns">
            <group id="MyGroup" label="My Group">
              <labelControl id="mylabel" getLabel="GetLabel"/>
              <button id="mybutton" label="Click Me" onAction="Click"/>
            </group>
          </tab>
        </tabs>
      </ribbon>
    </customUI>
    

     代码部分添加:

     private string _label = "Label";

    public string GetLabel(Office.IRibbonControl control)
    {
    return _label;
    }

    public void Click(Office.IRibbonControl control)
    {
    _label = "Changed By Button";
    ribbon.InvalidateControl("mylabel");
    }

    注意这样几点:

    1 在XML中labelControl的label和getLabel不能同时出现,否则vsto启动时看不到label控件

    2 所有控件至少有一个id属性,否则vsto启动时看不到控件

    3 回调函数一定要按照代理原型定义 


     

  • 相关阅读:
    Study Plan The TwentySecond Day
    Study Plan The Nineteenth Day
    Study Plan The TwentySeventh Day
    Study Plan The Twentieth Day
    Study Plan The TwentyFirst Day
    python实现进程的三种方式及其区别
    yum makecache
    JSONPath 表达式的使用
    oracle执行cmd的实现方法
    php daodb插入、更新与删除数据
  • 原文地址:https://www.cnblogs.com/BeanHsiang/p/2417754.html
Copyright © 2011-2022 走看看