Excel 自定义任务窗格如何在保持UI响应的同时切换可见性?
我正在尝试在Excel加载项中添加一个自定义任务窗格,其工作方式与Pivot Tables窗格类似 这样做的目的是,当选择一个表时,自定义窗格应该出现并且应该消失。为此,我创建了一个自定义任务窗格:Excel 自定义任务窗格如何在保持UI响应的同时切换可见性?,excel,vsto,ms-office,Excel,Vsto,Ms Office,我正在尝试在Excel加载项中添加一个自定义任务窗格,其工作方式与Pivot Tables窗格类似 这样做的目的是,当选择一个表时,自定义窗格应该出现并且应该消失。为此,我创建了一个自定义任务窗格: this._taskPane = Globals.AddIn.CustomTaskPanes.Add( new TableTaskPane(), "FooPane"); this._taskPane.DockPositionRestrict = MsoCTPDockPosit
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线程上调度属性设置,但它会导致相同的阻塞。我很乐意更改任务窗格,使其在不进行转换的情况下立即显示(如透视表窗格),但我也看不到任何可以实现这一点的东西 我做得不对吗?有没有办法用direct COM或其他一些微妙隐藏的行为来修复此问题?您可以通过关闭以下愚蠢的windows动画功能来实现这一点(甚至可以提高性能): 控制面板->系统和安全->系统->高级设置->性能设置->视觉效果 在这种情况下,我认为您需要关闭此选项:
- 为窗口内的控件和元素设置动画
- 淡入或滑动菜单进入视图
- 滑动打开组合框
- 最小化和最大化窗口时设置窗口动画