【问题标题】:Winforms WPF Interop - Wpf controls rendered inactiveWinforms WPF Interop - Wpf 控件呈现非活动状态
【发布时间】:2010-08-11 11:00:49
【问题描述】:

关于 wpf 控件的绘制,我与 question 有类似的问题

我使用的应用程序是一个相当大的 Windows 窗体线程应用程序,在整个应用程序中包含多个 wpf 用户控件。问题出现在应用程序的插件中,其中第三方 c++ 库在单独的线程上调用,WndProc 被覆盖以从第三方库获取进度更新。我尚未确定导致问题的确切情况,但与上述问题类似,在几次运行后 wpf 控件无法绘制和更新。

设置 elementhosts 的宽度确实解决了大多数控件的绘画问题,但在此之后,应用程序中的所有 wpf 控件似乎都变得“无响应” - 视觉上......进度条无法显示进度(尽管值确实发生了变化),滚动条没有响应,在列表视图中选择一个项目不会突出显示它(它在调整大小后会突出显示并且它确实被选中 - 你只是可以看到它被选中)树视图在调整大小后不会绘制,它只显示树视图应该在的黑色背景(尽管当我点击它们应该在树视图中的项目时,事件确实会被触发)

我知道我可能应该首先找出导致此问题的问题的根源(它相当随机且难以捕获)-尽管在 WndProc 方法中设置断点似乎确实会导致它在常规基础上失败...

我所希望的是一种“重新激活”/刷新整个应用程序中所有其他控件的方法...我是一名中级 wpf、c# 开发人员,并且对在有效使用它们的背景...我的想法是某些告诉 wpf 重绘的事件或消息必须被破坏或中断或其他东西 - 我如何确定什么被破坏并可能重新激活它?

任何建议将不胜感激......

谢谢

【问题讨论】:

  • 我设法缩小了导致问题的范围。从 WndProc 方法反复更新了自定义 WPF 进度条,当删除此更新时,其他 wpf 控件不会出现问题...我通过删除有问题的 wpf 控件并放入 Windows 窗体控件来解决此问题。然而,它并没有解决问题发生的原因以及可以采取哪些措施来防止它......我将做进一步的测试和测试应用程序来尝试确定这一点。

标签: c# .net wpf


【解决方案1】:

可能是因为 WndProc 覆盖,导致 WPF 控件图呈现的事件永远不会被处理。

由于您正在与 WinForms 进行互操作,因此您可以通过在某处调用 Application.DoEvents(); 来强制处理事件。也许在您更新进度条之后。

【讨论】:

    猜你喜欢
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2012-08-05
    • 2012-02-12
    相关资源
    最近更新 更多