Офисная надстройка / область наложения на верхней части ленты
Я хочу создать пользовательскую вкладку для ленты Outlook.
Я сразу же отбросил мысль о создании настоящей ленты с использованием стандартных элементов управления, потому что я знаю, что она сильно ограничена. Нет пользовательских элементов управления, почти ни одно из известных событий, доступных для тех же элементов управления в других проектах, нет шансов на другой дизайн или макет внутри ленты и т. Д.
Я сделал Регион и заполнил его своими пользовательскими элементами управления WPF. Регион работает нормально, но вот проблема:
- Я хочу иметь пользовательскую вкладку на ленте ("MyTab")
- Когда я нажимаю на вкладку, я хочу отобразить мой регион, где будут находиться элементы управления ленты, чтобы он выглядел так, как будто мой регион является панелью ленты.
Высота ленты является фиксированной, и вы не можете изменить ее AFAIK. Есть ли способ наложить мой регион поверх ленты? Неважно, если это требует много работы. Я должен сделать это, и я хочу научиться.
3 ответа
Услышав здесь и везде, что то, что я хотел сделать, было действительно невозможно, я нашел обходной путь. Я решил, что если я не смогу заставить его работать с инструментами, которые я должен использовать, я просто импровизирую. Вот краткое объяснение, если кому-то еще нужно сделать сильно настроенную ленту:
- Сделайте ленточную вкладку с RibbonUI. Все идет нормально.
- Создайте диалог без полей высотой 92 пикселя (чтобы он поместился внутри ленты)
- Поместите все необходимые настраиваемые элементы управления в этот диалог (элементы управления WPF должны находиться внутри ElementHost)
- Загрузите пакет NuGet "MouseKeyHook" и добавьте обработчик событий для MouseClick.
- Узнайте положение вашей вкладки (используйте Инспектор x и y corrdinates) и выполните простое выражение IF, чтобы проверить, действительно ли пользователь щелкает внутри границ вашей вкладки (не забудьте проверить и X, и Y). Когда он это сделает, просто сделайте Dialog.Show().
- Используйте событие MouseMove для динамического изменения размера и изменения положения диалога. Если вы этого не сделаете, диалоговое окно с остается на месте, когда пользователь перемещает инспектора.
...и так далее. Вы также должны обрабатывать поведение диалога при минимальном / максимальном увеличении и закрытии. Это много работы, но иллюзия почти идеальна. Это похоже на настоящий Ribbontab, и вы можете делать что угодно внутри него. Дайте ему фоновое изображение, нарисуйте график, откройте браузер....:D
Вы можете рассмотреть возможность размещения пользовательских элементов управления прямо под полосой ленты. VSTO (ни регионы формы Outlook) не предоставляют никакого макета для этого, но вы можете использовать Windows API для создания подклассов окон Outlook. См. Создание смежных окон в Outlook для получения дополнительной информации и примера кода. Или просто используйте Advanced Outlook View и формы областей, они предоставляют макет TopSubpane.
Пользовательский интерфейс Fluent предоставляет предопределенный набор элементов управления и не позволяет ничего делать с самой лентой. Подробнее о пользовательском интерфейсе ленты читайте в следующих статьях:
Нет, вы не можете наложить область поверх ленты или любого другого элемента управления, используя любой API, предоставляемый Outlook.