【问题标题】:ElementHost - blank when reopening windowElementHost - 重新打开窗口时为空白
【发布时间】:2011-02-03 16:27:35
【问题描述】:

我正在使用非 WPF 应用程序,因此我只能创建 WPF 用户控件。我的解决方法是将我的窗口创建为用户控件,然后我创建了一个通用的 winform 来托管 wpf 用户控件(使用 ElementHost)来模拟 wpf 窗口。

在我的开发机器(WinXP VM)上一切正常,但在客户端机器(VM 和物理,均为 Windows 7)上,窗口将打开一次并正常工作。但是,当他关闭它们然后重新打开它们时,它们只是空白的白色。每次关闭后,窗户都会被关闭并处理掉(即使我将它们留在内存中也会发生同样的事情)。客户端必须关闭应用程序并重新启动它才能再次看到窗口。

我已尝试添加刷新调用以及不使用元素主机但没有任何效果的内容。有任何想法吗?!它发生在每个窗口上。

【问题讨论】:

  • 重现问题的邮政编码。
  • 没什么,只是 ElementHost.Child = new WPFUserControl();正如我所说,所有用户控件都有这个问题,但仅限于 Windows 7

标签: .net wpf winforms


【解决方案1】:

很抱歉将其发布为答案,因为我还没有发表评论的权利。但我有一些问题或可能的方向需要调查。

您是否尝试过通过附加调试器来查看发生了什么?它是否仍在获取输入事件,或重新绘制事件,还是挂起?当窗口重新打开时,您的 WPF 用户控件是否还在加载?哦,一定要打破第一次机会异常,也许这是一个 WPF+CLR 问题,甚至没有机会再次加载。

Spy++ 是否对可能告诉您发生了什么的子窗口有任何说明?

哦,它只发生在他的 Win 7 盒子上还是在其他地方也能重现?

另外一件事,如果你只是创建一个简单的用户控件并做同样的事情会发生什么?会重现吗?

如果它只是页面中的内容而不是新窗口中的内容,它会重现吗?

尝试一些简单的东西,比如我在搜索时发现的这篇文章,看看是否有其他人遇到过这个问题。 http://www.switchonthecode.com/tutorials/wpf-tutorial-using-wpf-in-winforms

【讨论】:

  • 这是一篇关于它们之间互操作的陷阱的旧文章。想知道他们谈论的处置部分是否可能是问题所在。 blogs.msdn.com/b/scoberry/archive/2006/09/01/735844.aspx
  • 此页面还提到了 Win 7 上的问题。由于某种原因,当 WPF 控件位于单独的 dll 中时,它对他们有效。 myramserialize.blogspot.com/2010/03/…
  • 在我等待您的 cmets 之前再找到一个。我发现这与您的窗口有关,也许这可能是另一件事,它与滚动条有关,但以您的问题的方式提醒我:social.msdn.microsoft.com/Forums/en-US/wpf/thread/…
  • 如果您阅读我的问题,它表明它适用于 XP 机器,而不是 Windows 7 机器。我正在使用用户控件并将其托管在 WinForm 的 ElementHost 控件中。无论使用什么 WPF 用户控件(我的应用程序中有很多),它都会执行此操作。发生在它被处理或留在内存中的天气。我已经修改了 OnPaint 方法,但没有帮助。 WPF 控件也已经在单独的 DLL 中。也不能在同一个 DLL 中工作。您的第二个评论链接有一个有趣的解决方法,我将尝试。谢谢。
  • ElementHost.Child = WPFControl; var g = ElementHost.CreateGraphics(); g.处置();在表单的 OnLoad 方法中。
猜你喜欢
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
相关资源
最近更新 更多