0

我试图突破我对 Office 2007/2010 框架中 Fluent Ribbon/RibbonUI 系统的理解的极限。

结合我对 WPF/Silverlight 的 XAML 设计的知识和理解,我想看看我是否可以动态显示/隐藏下面描述的 Office 菜单项,似乎我有 FUBAR 的一些东西。

请告知我哪里出错了,或者我需要进一步开发的地方:

自定义UI.xml

<group id="grpITOfficeMenu"
            label="Office Menu">
    <button id="btnShowOffice"
                label="Show"
                onAction="ShowOfficeTabs"/>
    <button id="btnHideOffice"
                label="Hide"
                onAction="HideOfficeTabs" />
</group>
<group id="grpITContextualTabs"
            label="Contextual Tabs" >
    <button id="btnShowContext" 
                label="Show" 
                onAction="ShowContextualTabs"/>
    <button id="btnHideContext"
                label="Hide"
                onAction="HideContextualTabs"/>
</group>
...
<officeMenu>
    <button idMso="FileNew"
                getVisible="OfficeGetVisible" />
    <button idMso="FileOpen"
                getVisible="OfficeGetVisible" />
</officeMenu>
<contextualTabs>
    <tabSet idMso="TabSetSmartArtTools"
                getVisible="ContextualGetVisible" />
    <tabSet idMso="TabSetChartTools"
                getVisible="ContextualGetVisible"/>
    <tabSet idMso="TabSetDrawingTools"
                getVisible="ContextualGetVisible" />
    <tabSet idMso="TabSetPictureTools"
                getVisible="ContextualGetVisible" />
    <tabSet idMso="TabSetPivotTableTools"
                getVisible="ContextualGetVisible" />
    <tabSet idMso="TabSetHeaderAndFooterTools"
                getVisible="ContextualGetVisible" />
    <tabSet idMso="TabSetTableToolsExcel"
                getVisible="ContextualGetVisible" />
    <tabSet idMso="TabSetPivotChartTools"
                getVisible="ContextualGetVisible" />
    <tabSet idMso="TabSetInkTools"
                getVisible="ContextualGetVisible" />
</contextualTabs>

VBA:

'Method to Refresh the RibbonUI object
Sub RefreshRibbon(tag As String)
   'Check if Ribbon variable has been initialized with Ribbon Object from Excel
   If Not (Rib Is Nothing) Then
      'Ribbon variable has been initialized.
      MyTag = tag
      Rib.Invalidate
   End If
End Sub
'Flip OfficeMenu Tabs visible based on @OffVisible value
Sub OfficeGetVisible(control As IRibbonControl, ByRef returnVal)
   returnVal = OffVisible
End Sub
'Flip Contextual Tabs visible based on @ContVisible value
Sub ContextualGetVisible(control As IRibbonControl, ByRef returnVal)
   returnVal = ContVisible
End Sub
...
'Show/Hide ContextualTabs in the IT Mode
Sub ShowContextualTabs(Optional ctrl As Variant)
   ContVisible = True
   RefreshRibbon tag:=MyTag
End Sub
Sub HideContextualTabs(Optional ctrl As Variant)
   ContVisible = False
   RefreshRibbon tag:=MyTag
End Sub
'Show/Hide OfficeMenu Tabs in the IT Mode
Sub ShowOfficeTabs(Optional ctrl As Variant)
   OffVisible = True
   RefreshRibbon tag:=MyTag
End Sub
Sub HideOfficeTabs(Optional ctrl As Variant)
   OffVisible = False
   RefreshRibbon tag:=MyTag
End Sub

更新:

做了一些详细的测试,它在技术上是可行的,但我最终要完成的是Home, Insert, Page Layout, Formulas, Data, Review, View, Developer, etc.从功能区显示/隐藏选项卡的能力。我试图消除元素中startfromscratch属性的需要或必要性。customui

4

2 回答 2

2

解决了,必须查看功能区中&对象的所有idMso值。TabSetsTab

所以这里是 CustomUI 的 XML,允许显示/隐藏一些默认(至少是我需要的)选项卡/选项卡集。使用上述相同的显示/隐藏方法。

<customUI onLoad="s_UIOnLoad" xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon>
    <!-- Excel File Menu options, not available through Tab or TabSets -->
    <officeMenu>
      <button idMso="FileNew" getVisible="OfficeGetVisible" />
      <button idMso="FileOpen" getVisible="OfficeGetVisible" />
    </officeMenu>
    <!-- Excel TabSets that only become visible when certain objects
    are selected (such as ListObjects, PivotTables, Charts, etc) -->
    <contextualTabs>
      <tabSet idMso="TabSetChartTools" getVisible="ContextualGetVisible"/>
      <tabSet idMso="TabSetDrawingTools" getVisible="ContextualGetVisible" />
      <tabSet idMso="TabSetEquationTools" getVisible="ContextualGetVisible" />
      <tabSet idMso="TabSetHeaderAndFooterTools" getVisible="ContextualGetVisible" />
      <tabSet idMso="TabSetInkTools" getVisible="ContextualGetVisible" />
      <tabSet idMso="TabSetPictureTools" getVisible="ContextualGetVisible" />
      <tabSet idMso="TabSetPivotChartTools" getVisible="ContextualGetVisible" />
      <tabSet idMso="TabSetPivotTableTools" getVisible="ContextualGetVisible" />
      <tabSet idMso="TabSetSlicerTools" getVisible="ContextualGetVisible" />
      <tabSet idMso="TabSetSmartArtTools" getVisible="ContextualGetVisible" />
      <tabSet idMso="TabSetSparkline" getVisible="ContextualGetVisible" />
      <tabSet idMso="TabSetTableToolsExcel" getVisible="ContextualGetVisible" />
    </contextualTabs>
    <tabs>
      <!-- Excel Menu Tabs, these are not included in the TabSets and
    must be explicitely defined -->
      <tab idMso="TabAddIns" getVisible="OfficeGetVisible" />
      <tab idMso="TabBackgroundRemoval" getVisible="OfficeGetVisible" />
      <tab idMso="TabData" getVisible="OfficeGetVisible" />
      <tab idMso="TabDeveloper" getVisible="OfficeGetVisible" />
      <tab idMso="TabFormulas" getVisible="OfficeGetVisible" />
      <tab idMso="TabHome" getVisible="OfficeGetVisible" />
      <tab idMso="TabInsert" getVisible="OfficeGetVisible" />
      <tab idMso="TabPageLayoutExcel" getVisible="OfficeGetVisible" />
      <tab idMso="TabReview" getVisible="OfficeGetVisible" />
      <tab idMso="TabView" getVisible="OfficeGetVisible" />
      ...
    </tabs>
  </ribbon>
</customUI>
于 2012-12-27T19:03:04.130 回答
0

白手起家

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
  <ribbon  startFromScratch="true"/>
</customUI>

它删除了除后台之外的所有内容。

如果你想把其中一些带回来

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
  <ribbon  startFromScratch="true">
    <tabs>
      <tab idMso="TabView" visible="true"/>
    </tabs>
  </ribbon>
</customUI>
于 2013-08-05T21:50:11.480 回答