首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Winforms WPF Interop - WPF内容无法绘制

Winforms WPF Interop - WPF内容无法绘制
EN

Stack Overflow用户
提问于 2009-01-22 21:21:43
回答 5查看 4.1K关注 0票数 10

我有一个使用ElementHost来显示WPF UserControl的WinForm。每隔50次左右,当窗体加载WPF内容时,WPF内容绘制失败。你可以透过WinForm浏览器看到下面的任何东西。调整窗口大小将显示WPF内容。

这是一个已知的问题吗?有没有人能建议一种变通办法?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-02-27 23:19:24

我们以前曾与这类问题作过斗争。查看WPF论坛post,了解更多关于我们特殊风格的信息(我不知道这是不是相同的问题)。

我们发现唯一有效的方法是改变ElementHost的大小。

代码语言:javascript
复制
_elementHost.Width++;

这是一个完全的黑客,丑陋,我甚至尴尬地发布它。但其他东西对我们都不管用。所以,这绝对是一种变通方法。(笑)

我们尝试了无效,刷新和我们能想到的所有方法...在ElementHost上。我们还在WPF托管的内容上尝试了InvalidateMeasure、InvalidateArrange和InvalidateVisual。不走运。

如果你找到另一种方法来解决你的问题,我很乐意听听你的想法。

祝你好运,我知道我在这个问题上掉了一些头发。

更新1:我已经提交了另一个关于这个的论坛post。也许我们可以得到微软的回应。对我来说肯定是个bug。

更新2:在我修复了上面的hack刷新问题之后...我还有另一个问题需要解决,我认为在这里值得一提。也就是说:在屏幕刷新之前有一定的延迟。这使用户看起来像是在导航到另一个屏幕(它不是...它只是双缓冲缓冲区的内容)。我最终不得不在托管ElementHost的控件上手动调用System.Windows.Forms.Control.Refresh()。以这种方式,即使停顿仍然存在...至少屏幕是空白的。而且看起来用户并没有导航到某个地方...

票数 12
EN

Stack Overflow用户

发布于 2012-10-29 21:37:42

下面的方法对我很有效。

Form_Activated事件中,我添加了以下内容

代码语言:javascript
复制
elementHost1.HostContainer.InvalidateVisual();
票数 1
EN

Stack Overflow用户

发布于 2015-02-12 01:58:29

我知道这篇文章很旧,但在.net的更新版本(如3.5)中,你可以尝试使用软件渲染模式。当您在ElementHost中承载一个WPF控件时,这似乎解决了很多问题。

参考:Software rendering mode - WPF

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/470846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档