Контекстное всплывающее окно

Контекстное всплывающее окно — это основной элемент управления в представлении ContextPopup платформы ленты Windows. Это многофункциональная система контекстного меню, которая предоставляется платформой только в качестве расширения для реализации ленты. Платформа не предоставляет контекстное всплывающее окно в качестве независимого элемента управления.

Компоненты контекстного всплывающего окна

Контекстное всплывающее окно — это логический контейнер для контекстного меню и Mini-Toolbar вложенных элементов управления, которые предоставляются с помощью элементов разметки ContextMenu и MiniToolbar соответственно:

Каждый вложенный элемент управления может отображаться не более одного раза во всплывающем окне контекста.

На следующем снимке экрана показано всплывающее окно контекста и его составляющие элементы управления.

Снимок экрана с выносками, показывающими компоненты контекстного пользовательского интерфейса ленты.

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

Примечание

Контекстное всплывающее окно обычно отображается щелчком правой кнопкой мыши (или сочетанием клавиш SHIFT+F10) на интересующем объекте. Однако действия, необходимые для отображения контекстного всплывающего окна, определяются приложением.

 

Реализация контекстного всплывающего окна

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

В следующей таблице перечислены элементы управления, поддерживаемые каждым вложенным элементом управления Контекстное всплывающее окно.

Control Mini-Toolbar Контекстное меню
Button x x
Флажок x x
Поле со списком x
Кнопка раскрывающегося списка x x
Раскрывающееся меню выбора цвета x x
Раскрывающийся список x x
Элемент управления шрифтом x
Кнопка "Справка"
Коллекция на ленте
Spinner
Кнопка "Разделить" x x
Коллекция разделенных кнопок x x
Кнопка переключения x x

 

разметку

Каждый вложенный элемент управления контекстного окна должен объявляться отдельно в разметке.

Mini-Toolbar

При добавлении элементов управления на мини-панель инструментов всплывающего окна контекста следует учитывать следующие две рекомендации:

  • Элементы управления должны быть хорошо узнаваемыми и обеспечивать очевидные функциональные возможности. Знакомство является ключевым, так как метки и подсказки не предоставляются для Mini-Toolbar элементов управления.
  • Каждая команда, предоставленная элементом управления, должна быть представлена в другом месте пользовательского интерфейса ленты. Mini-Toolbar не поддерживает навигацию с помощью клавиатуры.

В следующем примере показана базовая разметка для элемента MiniToolbar , содержащего три элемента управления Button .

Примечание

Для каждой строки элементов управления на мини-панели инструментов указывается один элемент MenuGroup .

 

<MiniToolbar Name="MiniToolbar">
  <MenuGroup>
    <Button CommandName="cmdButton1" />
    <Button CommandName="cmdButton2" />
    <Button CommandName="cmdButton3" />
  </MenuGroup>
</MiniToolbar>

Контекстное меню

В следующем примере показана базовая разметка для элемента ContextMenu , содержащего три элемента управления Button .

Примечание

Каждый набор элементов управления в элементе MenuGroup отделяется горизонтальной полосой в контекстном меню.

 

<ContextMenu Name="ContextMenu">
  <MenuGroup>
    <Button CommandName="cmdCut" />
    <Button CommandName="cmdCopy" />
    <Button CommandName="cmdPaste" />
  </MenuGroup>
</ContextMenu>

Хотя контекстное всплывающее окно может содержать не более одного из вложенных элементов управления, несколько объявлений элементов ContextMenu и MiniToolbar в разметке ленты являются допустимыми. Это позволяет приложению поддерживать различные сочетания контекстного меню и элементов управления Mini-Toolbar на основе критериев, определенных приложением, таких как контекст рабочей области.

Дополнительные сведения см. в элементе ContextMap .

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

<ContextPopup>
  <ContextPopup.MiniToolbars>
    <MiniToolbar Name="MiniToolbar">
      <MenuGroup>
        <Button CommandName="cmdButton1" />
        <Button CommandName="cmdButton2" />
        <Button CommandName="cmdButton3" />
      </MenuGroup>
    </MiniToolbar>
  </ContextPopup.MiniToolbars>
  <ContextPopup.ContextMenus>
    <ContextMenu Name="ContextMenu">
      <MenuGroup>
        <Button CommandName="cmdCut" />
        <Button CommandName="cmdCopy" />
        <Button CommandName="cmdPaste" />
      </MenuGroup>
    </ContextMenu>
  </ContextPopup.ContextMenus>
  <ContextPopup.ContextMaps>
    <ContextMap CommandName="cmdContextMap" ContextMenu="ContextMenu" MiniToolbar="MiniToolbar"/>
  </ContextPopup.ContextMaps>
</ContextPopup>

Код

Чтобы вызвать контекстное всплывающее окно, вызывается метод IUIContextualUI::ShowAtLocation , когда окно верхнего уровня приложения ленты получает уведомление WM_CONTEXTMENU.

В этом примере показано, как обрабатывать уведомление WM_CONTEXTMENU в методе WndProc() приложения ленты.

case WM_CONTEXTMENU:
  POINT pt;
  POINTSTOPOINT(pt, lParam);

  // ShowContextualUI method defined by the application.
  ShowContextualUI (pt, hWnd);
  break;

В следующем примере показано, как приложение ленты может отображать контекстное всплывающее окно в определенном расположении экрана с помощью метода IUIContextualUI::ShowAtLocation .

GetCurrentContext() имеет значение cmdContextMap , как определено в предыдущем примере разметки.

g_pApplication является ссылкой на интерфейс IUIFramework .

HRESULT ShowContextualUI(POINT& ptLocation, HWND hWnd)
{
  GetDisplayLocation(ptLocation, hWnd);

  HRESULT hr = E_FAIL;

  IUIContextualUI* pContextualUI = NULL;
 
  if (SUCCEEDED(g_pFramework->GetView(
                                g_pApplication->GetCurrentContext(), 
                                IID_PPV_ARGS(&pContextualUI))))
  {
    hr = pContextualUI->ShowAtLocation(ptLocation.x, ptLocation.y);
    pContextualUI->Release();
  }

  return hr;
}

Ссылка на IUIContextualUI может быть освобождена до закрытия контекстного всплывающего окна, как показано в предыдущем примере. Однако ссылка должна быть освобождена в какой-то момент, чтобы избежать утечек памяти.

Внимание!

Mini-Toolbar имеет встроенный эффект исчезания, основанный на близости указателя мыши. По этой причине рекомендуется, чтобы Mini-Toolbar отображаться как можно ближе к указателю мыши. В противном случае из-за конфликтующих механизмов отображения Mini-Toolbar может отображаться не так, как ожидалось.

 

Контекстные свойства всплывающего окна

Нет ключей свойств, связанных с элементом управления Контекстное всплывающее окно.

Библиотека элементов управления Windows Ribbon Framework

Пример ContextPopup