显示上下文选项卡

在 Windows 功能区框架应用程序中,上下文选项卡是一个隐藏 的 Tab 控件,当选择或突出显示应用程序工作区中的对象(如图像)时,该控件将显示在选项卡行中。

简介

与包含各种常用命令的核心选项卡(无论工作区上下文如何)不同,上下文选项卡通常包含一个或多个仅适用于所选或突出显示对象的命令。

在应用程序工作区中选择或突出显示对象时,对象的类型和上下文可能需要不同的命令,这些命令在一个上下文选项卡上没有组织或功能意义。在这些情况下,可能需要多个包含在选项卡组中的上下文 选项卡。 例如,选择表单元格中包含的图像可能需要两个同时公开表和图像功能的上下文选项卡。

注意

除了多个上下文选项卡,功能区框架还支持功能区中的多个 选项卡组 控件。

 

显示上下文选项卡时,功能区框架强制实施一组基本行为,其中包括:

  • 上下文选项卡按声明顺序定位,位于功能区选项卡行中核心选项卡的右侧。
  • 调整功能区大小后,选项卡将缩放,选项卡标签将根据需要截断。 但是,可见上下文选项卡的显示优先级更高,最后缩放和截断。
  • 选项卡组的标签显示在应用程序标题栏中,并跨所有关联的上下文选项卡。
  • 当同时显示多个 选项卡组 控件时,将五种唯一颜色之一分配给应用程序标题栏中每个选项卡组的背景。 此颜色还用作选项卡组中上下文选项卡的突出显示颜色。
  • 选项卡组颜色分配基于选项卡组元素在标记中声明的顺序。 颜色由框架定义,不能由应用程序指定。
  • 框架定义的 选项卡组 颜色可以通过框架 属性 键间接修改。 有关详细信息,请参阅 自定义功能区颜色
  • 当任何一次显示超过五个 选项卡组 控件时,框架会循环使用关联的颜色。
  • 功能区中 选项卡 控件的最大数目限制为 100。 这包括上下文选项卡,可见或不可见。

以下屏幕截图显示了 Windows 7 画图中的上下文选项卡。

显示上下文选项卡控件的屏幕截图。

实现上下文选项卡

本部分讨论功能区上下文选项卡的实现详细信息,并演练如何将它们合并到功能区应用程序中。

标记

以下示例演示包含两个上下文选项卡的 TabGroup 元素的基本标记。

此部分代码显示 TabGroupTab 命令声明。

<!-- Contextual Tabs -->
<Command Name='cmdContextualTab1'
         LabelTitle='Contextual Tab 1'
         Symbol='ID_CONTEXTUALTAB1'/>
<Command Name='cmdContextualTab2'
         LabelTitle='Contextual Tab 2'
         Symbol='ID_CONTEXTUALTAB2'/>
<Command Name='cmdContextualTabGroup'
         LabelTitle='Contextual Tabs'
         Symbol='ID_CONTEXTUALTAB_GROUP'/>

此部分代码显示了在 TabGroup 中显示两个上下文选项卡所需的控件声明。

      <Ribbon.ContextualTabs>
        <TabGroup CommandName='cmdContextualTabGroup'>
          <Tab CommandName='cmdContextualTab1'>
            <!--InRibbonGallery Group-->
            <Group CommandName='cmdInRibbonGalleryGroup'
                   SizeDefinition='OneInRibbonGallery'>
              <InRibbonGallery CommandName='cmdTextSizeGallery3'
                               HasLargeItems='true'
                               ItemHeight='32'
                               ItemWidth='32'
                               MaxColumns='3' >
                <InRibbonGallery.MenuLayout>
                  <FlowMenuLayout Columns='3'
                                  Gripper ='Corner'/>
                </InRibbonGallery.MenuLayout>
              </InRibbonGallery>
            </Group>
            <!--Command Galleries Group-->
            <Group CommandName='cmdCommandGalleriesGroup'
                   SizeDefinition='OneInRibbonGallery'>
              <InRibbonGallery CommandName='cmdCommandGallery1'
                               Type='Commands'
                               MaxRows='3'
                               MaxColumns='3'>
                <InRibbonGallery.MenuLayout>
                  <FlowMenuLayout Columns='3'
                                  Gripper ='Corner'/>
                </InRibbonGallery.MenuLayout>
              </InRibbonGallery>
            </Group>
          </Tab>
          <Tab CommandName='cmdContextualTab2'></Tab>
        </TabGroup>
      </Ribbon.ContextualTabs> 

代码

UI_PKEY_ContextAvailable 是框架定义的单个属性键,用于指定上下文选项卡的可见性和状态。 在应用程序工作区中选择对象时,可以从 UI_CONTEXTAVAILABILITY 枚举中为此属性分配三个值之一,这些值定义上下文选项卡是否存在,如果存在,则它是否显示为活动选项卡。

应用程序通过在工作区上下文更改时使 UI_PKEY_ContextAvailable 属性失效并更新来请求选项卡组更新。

以下代码部分演示如何在应用程序工作区中选择图像时显示上下文选项卡。

// Initialize the image tools contextual tab visibility setting.
UI_CONTEXTAVAILABILITY g_ImageTools = UI_CONTEXTAVAILABILITY_NOTAVAILABLE;

// Called when an image is selected in the application.
void SelectImage()
{
  ...
  g_ImageTools = UI_CONTEXTAVAILABILITY_ACTIVE;

  // Invalidate the UI_PKEY_ContextAvailable property of the image tools  
  // contextual tab Command and trigger the UpdatePropery callback function.
  pUIFramework->InvalidateUICommand(
                  cmdImageTabSet, 
                  UI_INVALIDATIONS_PROPERTY, 
                  UI_PKEY_ContextAvailable);
  ...
}

// Update Tab Group properties.
HRESULT MyTabGroupCommandHandler::UpdateProperty(
                                  UINT nCmdID,
                                  REFPROPERTYKEY key,
                                  const PROPVARIANT* ppropvarCurrentValue,
                                  PROPVARIANT* ppropvarNewValue)
{
  HRESULT hr = E_FAIL;

  if (key == UI_PKEY_ContextAvailable)
  {
    hr = UIInitPropertyFromUInt32(key, g_ImageTools, ppropvarNewValue);
  }
  ...
  return hr;
}

功能区用户体验指南

功能区设计过程