在wpf中使用aforge videosouceplayer

时间:2012-09-27 08:15:20

标签: wpf aforge

我在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>

感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:4)

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

你没有要求它,但我相信你正在寻找替代品,因为你在WPF窗口中使用WinForms时遇到了Airspace Problem

如果您使用的是.NET 4或更早版本,您在上面的代码中分配的ZIndex属性将被忽略;-),Windows WPF窗口中的WinForm元素将总是在其他所有内容上绘制(您可以阅读更多关于这里:Layout Considerations for the WindowsFormsHost Element)。

这就是为什么我们最终制作了自己的播放器,尝试布局WinForm元素是非常令人不安的(我们需要滚动功能,并且找不到一个简单的方法让WinFormEl。部分消失,没有一些丑陋的调整无论如何,在VideoSourcePlayer上。)

如果您使用.NET 4.5,您可以更多地控制ZIndex(和其他布局属性),因为您可以阅读here(它与上面的文章相同,但对于.NET 4.5)

注意:我记得已经阅读了一篇博文,其中说的是isRedirected&amp; CompositionMode属性(你需要那些能够在WPF中正确布局你的WinForms,如上面的链接中所述)从4.5中排除发布但无法找到任何关于此的官方声明(最安全的方法是试用它:-))。

答案 1 :(得分:1)

我遇到了完全相同的问题;你喜欢Aforge Framework但不喜欢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控件!