Я пытаюсь добавить пользовательскую панель задач в надстройку 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 или какого-либо другого тонко-скрытого поведения?