2

我在 wpf 中使用 aforge:videosourceplayer,我遇到的麻烦是:为了在 wpf 中使用 aforge:VideoSourcePlayer,我们必须将它放在 WindowsFormsHost 标记中。如果我不想使用 WindowsFormsHost,还有其他选择吗?

<WindowsFormsHost Margin="5,5,5,201" Name="windowFormsHost" Panel.ZIndex="0">
       <aforge:VideoSourcePlayer x:Name="videoSourcePlayer" Height="200"  Margin="12,30,0,0" Width="360">
</aforge:VideoSourcePlayer>

任何帮助表示感谢,谢谢。

4

2 回答 2

4

不幸的是,没有,因为 WinForms 元素的绘制方式与 WPF Elemenets 不同,因此必须放置在单独的 hWND 中(请参阅下面的链接)。

您没有要求它,但我相信您正在寻找替代方案,因为您在 WPF 窗口中使用 WinForms 时遇到了空域问题。

如果您使用的是 .NET 4 或更早版本,您在上面的代码中分配的 ZIndex 属性将被忽略;-),WPF 窗口中的 WinForm 元素将始终绘制在其他所有内容之上(您可以在此处阅读有关此内容的更多信息:WindowsFormsHost 元素的布局注意事项)。

这就是我们最终制作自己的播放器的原因,尝试和布局 WinForm 元素非常令人不安(我们需要滚动功能,并且找不到让 WinFormEl 部分消失的简单方法。对 VideoSourcePlayer 没有一些丑陋的调整反正)。

如果您使用 .NET 4.5,您可以更好地控制 ZIndex(和其他布局属性),如您在此处阅读的那样(与上述文章相同,但适用于 .NET 4.5)

注意:我记得读过一篇博客文章,其中说 isRedirected&CompositionMode 属性(您需要那些能够在 WPF 中正确布局 WinForms 的属性,如上面的链接中所述)从 4.5 版本中排除但找不到任何对此的官方声明(最安全的方法是尝试一下:-))。

于 2012-09-28T10:28:44.463 回答
1

我遇到了完全相同的问题;您喜欢 Aforge 框架,但不喜欢 WindowsFormsHost。最终在这里找到了解决方案;

http://seaflection.wordpress.com/2012/01/29/getting-image-stream-using-webcam-in-wpf-asynchronous-ui-updating/

Sagar Mohite 通过简单地创建一个 Compatability.dll 解决了这个问题,它允许您将位图转换为正确的格式,以便它们可以在 Image 元素而不是 VideoSourcePlayers 中表示。还需要一个 DispatcherObject,但所需的少量代码都在链接中 + 下载 dll,您可以开始在 Aforge 视频源上覆盖 WPF 控件!

于 2013-01-30T15:46:16.383 回答