Поделиться через


Панель быстрого доступа

Панель быстрого доступа (QAT) — это небольшая настраиваемая панель инструментов, которая предоставляет набор команд, указанных приложением или выбранным пользователем.

Введение

По умолчанию панель быстрого доступа (QAT) находится в заголовке окна приложения, но ее можно настроить для отображения под лентой. Помимо предоставления команд, панель быстрого доступа (QAT) также включает настраиваемое раскрывающееся меню, содержащее полный набор команд панели быстрого доступа (QAT) по умолчанию (скрытые или отображаемые на панели быстрого доступа (QAT)) и набор параметров панели быстрого доступа (QAT) и ленты.

На следующем снимке экрана показан пример панели быстрого доступа на ленте (QAT).

Снимок экрана: qat на ленте microsoft paint.

Панель быстрого доступа (QAT) состоит из сочетания до 20 команд, указанных приложением (известный как список приложений по умолчанию) или выбранным пользователем. Панель быстрого доступа (QAT) может содержать уникальные команды, недоступные в другом месте пользовательского интерфейса ленты.

Примечание.

Хотя почти все элементы управления лентой позволяют добавлять связанные команды на панель быстрого доступа (QAT) через контекстное меню, показанное на следующем снимке экрана, команды, предоставляемые в всплывающем окне контекста, не предоставляют это контекстное меню.

Снимок экрана: контекстное меню команды на ленте microsoft paint.

Реализация панели быстрого доступа

Как и во всех элементах управления платформы ленты Windows, для использования полного преимущества панели быстрого доступа (QAT) требуется как компонент разметки, который управляет презентацией на ленте, так и компонентом кода, который управляет его функциональностью.

Разметка

Элемент управления панели быстрого доступа (QAT) объявлен и связан с идентификатором команды в разметке с помощью элемента QuickAccessToolbar . Идентификатор команды используется для идентификации и привязки панели быстрого доступа (QAT) к обработчику команд, определенному приложением.

Помимо базового обработчика команд для основной функции панели быстрого доступа (QAT), объявляя необязательный атрибут элемента ConfigurationCommandName QuickAccessToolbar , платформа добавляет элемент More Commands в список команд раскрывающегося меню панели быстрого доступа (QAT), для которой требуется определить дополнительный обработчик команд.

Для согласованности между приложениями ленты рекомендуется запустить диалоговое окно настройки панели быстрого доступа (QAT) обработчика команд CustomizeCommandName . Так как платформа ленты предоставляет только точку запуска в пользовательском интерфейсе, приложение несет ответственность за предоставление реализации диалогового окна настройки при получении уведомления обратного вызова для этой команды.

На следующем снимке экрана показано раскрывающееся меню панели быстрого доступа (QAT) с элементом команды "Дополнительные команды ".

Снимок экрана: меню qat с дополнительными командами... элемент команды.

Список по умолчанию приложений для панели быстрого доступа (QAT) указывается с помощью свойства QuickAccessToolbar.ApplicationDefaults , которое определяет список рекомендуемых команд по умолчанию, все из которых перечислены в раскрывающемся меню панели быстрого доступа (QAT).

Чтобы отобразить команды из списка по умолчанию приложения на панели инструментов быстрого доступа (QAT), атрибут ApplicationDefaults.IsChecked каждого элемента управления должен иметь значение true. На предыдущих изображениях показаны результаты настройки этого атрибута true для команд Save, Undo и Redo .

QuickAccessToolbar.ApplicationDefaults поддерживает три типа элементов управления лентой: Button, Toggle Button и Check Box.

Примечание.

Windows 8 и более поздней версии: поддерживаются все элементы управления на основе коллекции (ComboBox, InRibbonGallery, SplitButtonGallery и DropDownGallery).

Элементы в элементе управления коллекции могут поддерживать выделение при наведении указателя мыши. Для поддержки выделения указателя мыши коллекция должна быть коллекцией элементов и использовать FlowMenuLayout типа VerticalMenuLayout.

В следующем примере показана базовая разметка элемента QuickAccessToolbar .

В этом разделе кода показаны объявления command для элемента панели быстрого доступа (QAT).

<Command Name="cmdQAT"
         Symbol="ID_QAT"
         Id="40000"/>
<Command Name="cmdCustomizeQAT"
         Symbol="ID_CUSTOM_QAT"
         Id="40001"/>

В этом разделе кода показаны объявления элементов управления для элемента панели быстрого доступа (QAT).

      <Ribbon.QuickAccessToolbar>
        <QuickAccessToolbar CommandName="cmdQAT"
                            CustomizeCommandName="cmdCustomizeQAT">
          <QuickAccessToolbar.ApplicationDefaults>
            <Button CommandName="cmdButton1"/>
            <ToggleButton CommandName="cmdMinimize"
                          ApplicationDefaults.IsChecked="false"/>
          </QuickAccessToolbar.ApplicationDefaults>
        </QuickAccessToolbar>
      </Ribbon.QuickAccessToolbar>

Код

Приложение платформы ленты должно предоставить метод обратного вызова обработчика команд для управления панелью быстрого доступа (QAT). Этот обработчик работает аналогично обработчикам коллекции команд, за исключением того, что панель быстрого доступа (QAT) не поддерживает категории. Дополнительные сведения см. в статье "Работа с коллекциями".

Коллекция команд быстрого доступа (QAT) извлекается в виде объекта IUICollection с помощью ключа свойства UI_PKEY_ItemsSource . Добавление команд на панель быстрого доступа (QAT) во время выполнения выполняется путем добавления объекта IUISimplePropertySet в IUICollection.

В отличие от коллекций команд, для объекта IUISimplePropertySet не требуется свойство типа команд (UI_PKEY_CommandType). Однако команда должна существовать в списке ленты или панели быстрого доступа (QAT) по умолчанию; Новая команда не может быть создана во время выполнения и добавлена на панель быстрого доступа (QAT).

Примечание.

Приложение ленты не может заменить панель быстрого доступа (QAT) IUICollection пользовательским объектом коллекции, производным от IEnumUnknown.

В следующем примере показана базовая реализация обработчика команд быстрого доступа (QAT).

/* QAT COMMAND HANDLER IMPLEMENTATION */
class CQATCommandHandler
      : public CComObjectRootEx<CComMultiThreadModel>
      , public IUICommandHandler
{
  public:
    BEGIN_COM_MAP(CQATCommandHandler)
      COM_INTERFACE_ENTRY(IUICommandHandler)
    END_COM_MAP()

    // QAT command handler's Execute method
    STDMETHODIMP Execute(UINT nCmdID,
                         UI_EXECUTIONVERB verb, 
                         const PROPERTYKEY* key,
                         const PROPVARIANT* ppropvarValue,
                         IUISimplePropertySet* pCommandExecutionProperties)
    {
      UNREFERENCED_PARAMETER(nCmdID);
      UNREFERENCED_PARAMETER(verb);
      UNREFERENCED_PARAMETER(ppropvarValue);
      UNREFERENCED_PARAMETER(pCommandExecutionProperties);

      // Do not expect Execute callback for a QAT command
      return E_NOTIMPL;
    }

    // QAT command handler's UpdateProperty method
    STDMETHODIMP UpdateProperty(UINT nCmdID,
                                REFPROPERTYKEY key,
                                const PROPVARIANT* ppropvarCurrentValue,
                                PROPVARIANT* ppropvarNewValue)
    {
      UNREFERENCED_PARAMETER(nCmdID);
      UNREFERENCED_PARAMETER(ppropvarNewValue);

      HRESULT hr = E_NOTIMPL;

      if (key == UI_PKEY_ItemsSource)
      {
        ATLASSERT(ppropvarCurrentValue->vt == VT_UNKNOWN);

        CComQIPtr<IUICollection> spCollection(ppropvarCurrentValue->punkVal);

        UINT nCount;
        if (SUCCEEDED(hr = spCollection->GetCount(&nCount)))
        {
          if (nCount == 0)
          {
            // If the current Qat list is empty, then we will add a few items here.
            UINT commands[] =  { cmdSave, cmdUndo};

            int count = _countof(commands);

            for (int i = 0; i < count; i++)
            {
              PROPERTYKEY keys[1] = {UI_PKEY_CommandId};
              CComObject<CItemProperties> *pItem = NULL;
              if (SUCCEEDED(CComObject<CItemProperties>::CreateInstance(&pItem)))
              {
                PROPVARIANT vars[1];

                InitPropVariantFromUInt32(commands[i], &vars[0]);

                pItem->Initialize(NULL, _countof(vars), keys, vars);

                CComPtr<IUnknown> spUnknown;
                pItem->QueryInterface(&spUnknown);
                spCollection->Add(spUnknown);
                            
                FreePropVariantArray(_countof(vars), vars);
              }
            }
          }
          else
          {
            // Do nothing if the Qat list is not empty.
            // Return S_FALSE to indicate the callback succeeded.
            return S_FALSE; 
          }
        }
      }
    return hr;
  }
};

Сохраняемость QAT

Элементы и параметры панели быстрого доступа (QAT) можно сохранять в сеансах приложений с помощью функций IUIRibbon::SaveSettingsToStream и IUIRibbon::LoadSettingsFromStream . Дополнительные сведения см. в разделе "Сохранение состояния ленты".

Свойства панели быстрого доступа

Платформа ленты определяет коллекцию ключей свойств для элемента управления "Панель быстрого доступа" (QAT).

Как правило, свойство панели быстрого доступа (QAT) обновляется в пользовательском интерфейсе ленты, недействив команду, связанную с элементом управления, с помощью вызова метода IUIFramework::InvalidateUICommand . Событие недопустимого действия обрабатывается и обновляется свойство, определенное методом обратного вызова IUICommandHandler::UpdateProperty .

Метод обратного вызова IUICommandHandler::UpdateProperty не выполняется, а приложение запрашивается для обновленного значения свойства, пока свойство не требуется платформой. Например, при активации вкладки и элементе управления, отображаемом в пользовательском интерфейсе ленты, или при отображении подсказки.

Примечание.

В некоторых случаях свойство можно получить с помощью метода IUIFramework::GetUICommandProperty и задать с помощью метода IUIFramework::SetUICommandProperty.

В следующей таблице перечислены ключи свойств, связанные с элементом управления панели быстрого доступа (QAT).

Ключ свойства Примечания.
UI_PKEY_ItemsSource Поддерживает IUIFramework::GetUICommandProperty (не поддерживает IUIFramework::SetUICommandProperty).IUIFramework::GetUICommandProperty возвращает указатель на объект IUICollection, представляющий команды в QAT. Каждая команда определяется своим идентификатором команды, который получается путем вызова метода IUISimplePropertySet::GetValue и передачи ключа свойства UI_PKEY_CommandId.

Нет ключей свойств, связанных с элементом команды "Дополнительные команды " раскрывающегося меню панели быстрого доступа (QAT)