我试图在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;
这实现了显示和隐藏窗格的效果,但不幸的是在UI中产生了一些延迟,当任务窗格在可见性状态之间转换时,光标在单元格之间"反弹"。
这似乎是因为Visible
属性的setter阻塞直到任务窗格完成转换。在Excel 2013中,它从窗口的一侧滑出,这大约需要500毫秒。
我看不到任何方法来改变这种行为-我已经尝试调度STA线程上的属性设置,但它会导致相同的阻塞。我很乐意改变任务窗格,这样它就会立即出现,而不需要转换(就像透视表窗格),但我也没有看到任何东西可以让它发生。
我做错了吗?有没有办法用直接COM或其他一些微妙隐藏的行为来解决这个问题?
你应该能够通过窗格API或失败,使用Windows API SetWindowPos设置窗格的宽度为零。然后改变能见度。我不使用VSTO,但知道可以使用原始的Office窗格对象来完成。
您可以通过关闭愚蠢的窗口动画功能来实现这一点(甚至可以提高性能):控制面板->系统和安全->系统->高级设置->性能设置->视觉效果。
在这种情况下,我认为你需要关闭这个:
- 动画控件和窗口内的元素。
但是这些对于加快速度也很好:
- 淡出或滑动菜单进入视图
- 滑动打开组合框
- 最小化和最大化时动画窗口。