Как настраиваемая панель задач может отображать видимость при сохранении пользовательского интерфейса?
Я пытаюсь добавить пользовательскую панель задач в надстройку Excel, которая предназначена для работы аналогично панели сводных таблиц.
Предполагается, что при выборе таблицы пользовательская панель должна появиться и должна исчезнуть. Для этого я создал пользовательскую панель задач:
this._taskPane = Globals.AddIn.CustomTaskPanes.Add(
new TableTaskPane(),
"FooPane");
this._taskPane.DockPositionRestrict
= MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoHorizontal;
Когда таблица выбрана, панель становится видимой, а при ее выборе панель скрыта:
ListObject table = AddTable(); // Creates the table and populates with data.
table.Selected += range => this._taskPane.Visible = true;
table.Deselected += range => this._taskPane.Visible = false;
Это обеспечивает эффект отображения и скрытия панели, но, к сожалению, создает некоторое отставание в пользовательском интерфейсе, где курсор "отскакивает" между ячейками, когда панель задач переходит между состояниями видимости.
Кажется, это связано с тем, что установщик из свойства Visible
блокирует до тех пор, пока область задач не завершит переход. В Excel 2013 он открывается со стороны окна, который занимает около 500 мс.
Я не вижу никакого способа изменить это поведение - я попытался настроить параметры свойства в потоке STA, но он вызывает ту же блокировку. Я был бы рад изменить панель задач так, чтобы она сразу появилась без перехода (например, в панель Pivot Table), но я ничего не вижу, чтобы это произошло.
Я делаю это неправильно? Есть ли способ исправить это с помощью прямого COM или какого-либо другого тонко-скрытого поведения?
Ответы
Ответ 1
Вы можете выполнить это (и даже повысить производительность), отключив глупые функции анимации окон, найденные здесь:
Панель управления → Система и безопасность → Система → Расширенные настройки → Настройки производительности → Визуальные эффекты.
В этом конкретном случае, я считаю, вам нужно отключить это:
- Анимация элементов управления и элементов внутри окон.
Но это также отлично подходит для ускорения:
- Вывести или переместить меню в режим просмотра
- Сдвинуть открытые комбо-боксы
- Анимировать окна при минимизации и максимизации.
Ответ 2
Вы должны иметь возможность установить ширину панели на ноль либо через API панели, либо сбой, использующий набор инструментов Windows API SetWindowPos. Затем измените видимость. Я не использую VSTO, но знаю, что это можно сделать, используя необработанные объекты Office Pane.