在Excel 2010中移动工作簿之后,ElementHost不会刷新

在Excel 2010 32位的Windows 7 x64,.NET 4.0中,CustomTaskPane上的ElementHost有更奇怪的问题

主机(或主机本身)内的控制在工作簿窗口移动后不会重新绘制。 为了说明这一点,我创build了示例:

_host = new ElementHost { Dock = DockStyle.Fill, BackColorTransparent = false, BackColor = Color.Blue }; _userControl = new UserControl(); _userControl.Controls.Add(_host); _taskPane = CustomTaskPanes.Add(_userControl, "Pane"); _taskPane.Visible = true; 

我为了简单而忽略了孩子的控制,结果是一样的。

这是如何看起来如预期的那样: 在这里输入图像说明

现在我把工作簿移动了一下,我得到: 在这里输入图像描述

显然,灰色和黑色的地区是不能预料的(与实际控制托pipe相同的结果)。 _host刷新修复了这个问题 – 重新绘制自己和孩子,但问题是我没有发现VSTO中的任何事件来检测何时移动工作簿。

问题:

  1. 那些黑色/灰色的地方从哪里来?
  2. 是否有可能避免/修复它,以及如何?
  3. (作为解决方法)是否有可能检测到工作簿窗口的移动,所以我可以刷新_host并祈祷其发生的唯一情况? (馊主意)

其他testing表明,Windows窗体控件不会遭受这种行为。

提前致谢。

您应该将一个真正的XAML用户控件放入ElementHost中。

在您的WPF用户控件中,使背景颜色=蓝色的网格。

不要依赖元素主机本身

另外检查更新,VSTO中的elementHost获取大量的错误。