Контекстное всплывающее окно
Контекстное всплывающее окно — это основной элемент управления в представлении ContextPopup платформы ленты Windows. Это многофункциональная система контекстного меню, которая предоставляется платформой только в качестве расширения для реализации ленты. Платформа не предоставляет контекстное всплывающее окно в качестве независимого элемента управления.
- Компоненты контекстного всплывающего окна
- Реализация контекстного всплывающего окна
- Контекстные свойства всплывающего окна
- Связанные темы
Компоненты контекстного всплывающего окна
Контекстное всплывающее окно — это логический контейнер для контекстного меню и Mini-Toolbar вложенных элементов управления, которые предоставляются с помощью элементов разметки ContextMenu и MiniToolbar соответственно:
- 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 может отображаться не так, как ожидалось.
Контекстные свойства всплывающего окна
Нет ключей свойств, связанных с элементом управления Контекстное всплывающее окно.
Связанные темы