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

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

我正在尝试在Excel加载项中添加一个自定义任务窗格,其工作方式与Pivot Tables窗格类似

这样做的目的是,当选择一个表时,自定义窗格应该出现并且应该消失。为此,我创建了一个自定义任务窗格:

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动画功能来实现这一点(甚至可以提高性能): 控制面板->系统和安全->系统->高级设置->性能设置->视觉效果

在这种情况下,我认为您需要关闭此选项:

  • 为窗口内的控件和元素设置动画
但这些也有助于加快速度:

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

您应该能够通过窗格API或使用Windows API SetWindowPos将窗格宽度设置为零。然后更改可见性。我不使用VSTO,但知道可以使用原始的Office窗格对象来完成。

嘿,你解决了问题吗?如果是的话,你能给出答案吗?非常感谢。这并不是您想要的,它是整个Office 2013的一个全局更改,并且需要重新启动,因此您暂时无法在加载项中执行此操作,但您可以通过注册表更改来完全禁用动画:[HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\Graphics]“DisableAnimations”=dword:0000000 1“我很乐意更改任务窗格,使其在没有转换的情况下立即显示(如Pivot表窗格),但我也看不到任何情况会发生这种情况。”-您可以通过注册表更改禁用自定义任务窗格的动画(DisableWindowTransitionsOnAddinTaskPanes)这样就消除了500毫秒的延迟。有关详细信息,请参阅我的。我认为我不会很幸运地说服我的所有客户降低他们的整个视觉体验,只是为了让我的插件工作得更好,但我认为这可能是解决问题的唯一实际方法。