Csharp/C#教程:Winforms WPF Interop – WPF内容无法绘制分享


Winforms WPF Interop – WPF内容无法绘制

我有一个使用ElementHost来显示WPF UserControl的WinForm。 表单加载时,每50次左右,WPF内容无法绘制。 你可以通过WinForm chrome查看下面的内容。 调整窗口大小可以显示WPF内容。

这是一个已知的问题? 有人可以建议一个解决方法吗?

我们之前已经打过这些类型的问题。 有关我们特定风味的更多信息,请参阅此WPF论坛post (我不知道它是否是同一个问题)。

我们发现唯一可行的方法是改变ElementHost的大小

_elementHost.Width++; 

这是一个完整的黑客,丑陋,甚至发布它我都很尴尬。 但没有其他任何东西对我们有用。 所以,这绝对是一种解决方法。 (GRIN)

我们在ElementHost上尝试了Invalidate,Refresh和我们能想到的一切…… 我们还在WPF托管内容上尝试了InvalidateMeasure,InvalidateArrange和InvalidateVisual。 没运气。

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

祝你好运,我知道我已经失去了一些头发。

更新1:我已经提交了另一个WPF论坛post 。 也许我们可以得到微软的回复。 当然对我来说似乎是个错误。

更新2:我用上面的黑客修复了刷新问题……我还有另外一个问题需要解决,我觉得这里值得一提。 那就是:在屏幕刷新之前有一定的延迟。 这使得用户似乎导航到另一个屏幕(它不是……它只是双缓冲缓冲区的内容)。 我最终不得不在托管ElementHost的Control上手动调用System.Windows.Forms.Control.Refresh()。 通过这种方式,即使暂停仍然存在…至少屏幕是空白的…它看起来不像用户在某处导航…

以下为我工作。
Form_Activated事件上,我添加了以下内容

 elementHost1.HostContainer.InvalidateVisual(); 

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

参考: 软件渲染模式 – WPF

也许在ElementHost上调用Invalidate?

您是否尝试使用reflection来查看_elementHost.Width ++背后的代码?

上述就是C#学习教程:Winforms WPF Interop – WPF内容无法绘制分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1008758.html

(0)
上一篇 2021年12月29日
下一篇 2021年12月29日

精彩推荐