2

我在 Windows 7 x64、.NET 4.0 上的 Excel 2010 32 位中的 CustomTaskPane 上的 ElementHost 有一个奇怪的问题

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

    _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;

为简单起见,我省略了子控件,因为结果是相同的。

这是它的预期外观: 在此处输入图像描述

现在我移动了一些工作簿,我得到: 在此处输入图像描述

显然灰色和黑色区域不是预期的(与实际控制托管的结果相同)。_host refresh 解决了这个问题——重绘自身和孩子,但问题是我没有在 VSTO 中找到任何事件来检测工作簿何时被移动。

问题:

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

其他测试表明,Windows 窗体控件不会受到这种行为的影响。

提前致谢。

4

1 回答 1

0

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

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

不要依赖元素宿主本身

还要检查更新,VSTO 中的 elementHost 有很多错误。

于 2012-10-08T14:10:42.510 回答