【发布时间】:2018-03-27 15:28:15
【问题描述】:
我正在尝试在 Excel 插件中添加自定义任务窗格,该插件的工作方式与数据透视表窗格类似。
The intention is that when a Table is selected the custom pane should appear and should disappear.为此,我创建了一个自定义任务窗格:
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;
这实现了显示和隐藏窗格的效果,但不幸的是在 UI 中产生了一些延迟,其中当任务窗格在可见性状态之间转换时,光标在单元格之间“弹跳”。
这似乎是因为 Visible 属性的设置器会阻塞,直到任务窗格完成转换。在 Excel 2013 中,它从窗口的一侧滑出,大约需要 500 毫秒。
我看不到任何改变这种行为的方法 - 我已经尝试在 STA 线程上安排属性设置,但它会导致相同的阻塞。我很乐意更改任务窗格,使其立即显示而无需转换(如数据透视表窗格),但我也看不到任何可以实现这一点的东西。
我做错了吗?有没有办法通过直接 COM 或其他一些微妙隐藏的行为来解决这个问题?
【问题讨论】:
-
嘿,你解决问题了吗?如果是这样,您可以发布答案吗?非常感谢。
-
不是您真正想要的,它是对所有 Office 2013 的全局更改,而且它需要重新启动,因此您暂时无法在插件中执行此操作,但您可以禁用动画与注册表更改一起: [HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\Graphics] "DisableAnimations"=dword:00000001
-
“我很乐意更改任务窗格,使其立即出现而无需转换(如数据透视表窗格),但我也看不到任何事情可以实现。” - 您可以通过更改注册表 (DisableWindowTransitionsOnAddinTaskPanes) 禁用自定义任务窗格的动画,从而消除 500 毫秒的延迟。详情请看我的answer。