PowerPoint + VSTO动态更改上下文菜单

时间:2016-01-15 15:56:42

标签: c# vba vsto contextmenu powerpoint

我想在上下文菜单中添加一些按钮(可能还有其他类型的控件 - 我现在不确定),但只有在满足某些条件的情况下才会这样做。因此,有可用的Application.WindowBeforeRightClick事件,但只有在我点击幻灯片时才会触发,而不是在点击某些形状时触发。

到目前为止,我添加了一些xml作为功能区:

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
  <contextMenus>
    <contextMenu idMso="ContextMenuShape">
      <button id="button1" label="button1"/>
    </contextMenu>
    <contextMenu idMso="ContextMenuObjectsGroup">
      <button id="button2" label="Align vertical axes" onAction="AlignXAxis"  getVisible="ChangeCMObjectsGroupVisibility"/>
      <button id="button3" label="Align horizontal axes" onAction="AlignYAxis"  getVisible="ChangeCMObjectsGroupVisibility"/>
      <button id="button4" label="Align scale" onAction="MaxScale"  getVisible="ChangeCMObjectsGroupVisibility"/>
      <button id="button5" label="Add legend" onAction="Legend"  getVisible="ChangeCMObjectsGroupVisibility"/>
      <button id="button6" label="Adjust chart width" onAction="AdjustWidth"  getVisible="ChangeCMObjectsGroupVisibility"/>
      <button id="button7" label="Adjust chart height" onAction="AdjustHeight"  getVisible="ChangeCMObjectsGroupVisibility"/>
    </contextMenu>
  </contextMenus>
</customUI>

代码:

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    Application.WindowBeforeRightClick += new PPT.EApplication_WindowBeforeRightClickEventHandler(Application_WindowBeforeRightClick);
    ribbon= (Ribbon1)CreateRibbonExtensibilityObject();
}

void Application_WindowBeforeRightClick(PPT.Selection Sel, ref bool Cancel)
{
    PPT.Selection selection= Globals.ThisAddIn.Application.ActiveWindow.Selection;
    if (selection.Type==PPT.PpSelectionType.ppSelectionShapes)
    {
        if (selection.ShapeRange.HasChart==MsoTriState.msoTrue)
        {
            ribbon.TurnOnChangeCMObjectsGroupVisibility();
        }
    }
}

是否可以检查所选形状的类型,隐藏/显示/添加/删除控件,然后显示正确的上下文菜单?

1 个答案:

答案 0 :(得分:0)

右键单击形状时会触发Application_WindowSelectionChange事件。您可以检查该事件处理程序中的形状类型(或任何其他标准)。

要更新上下文菜单,您需要使功能区无效。这将调用您的ChangeCMObjectsGroupVisibility回调,并根据条件更新上下文菜单项的可见性。您可能需要使用全局变量为ChangeCMObjectsGroupVisibility回调提供哪些critera。

相关问题