自定义任务窗格如何在保持UI响应的同时切换可见性?



我试图在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窗格对象来完成。

您可以通过关闭愚蠢的窗口动画功能来实现这一点(甚至可以提高性能):控制面板->系统和安全->系统->高级设置->性能设置->视觉效果。

在这种情况下,我认为你需要关闭这个:

  • 动画控件和窗口内的元素。

但是这些对于加快速度也很好:

  • 淡出或滑动菜单进入视图
  • 滑动打开组合框
  • 最小化和最大化时动画窗口。

相关内容

  • 没有找到相关文章

最新更新