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


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

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

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

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

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

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

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

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

Заметка

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

 

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

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

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

Контроль Mini-Toolbar Контекстное меню
кнопки x x
флажок x x
поле со списком x
кнопкиDrop-Down x x
средства выбора цветаDrop-Down x x
коллекцииDrop-Down x x
элемента управления шрифтом x
кнопки справки
коллекцииIn-Ribbon
Спиннер
кнопка разделения 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 Button.

Заметка

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

 

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

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

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

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

<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 может не отображаться должным образом.

 

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

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

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

Пример ContextPopup