WPF嵌入Winform控件置顶问题
1. 引言
在使用WPF开发监控软件时,通常要使用相机软件自带的官方SDK,但是大多数SDK通过控件句柄进行图像显示,比较常见的包括海康威视以及微视的多款相机。但是WPF控件都是使用像素进行绘制,不存在控件句柄,即使获得的句柄也只是整个窗体的句柄。鉴于微软官方提供的WindowsFormHost能够将Winform控件引入WPF中,故通过此方式我们能够实现在WPF中使用winfrom控件的句柄。但是由于WPF使用DiretcX进行渲染,而Winfrom使用GDI进行渲染,由于GDI的渲染慢于DirectX,故显示出的软件界面,Winfrom控件始终处于最上层。
2. 问题分析
当我们需要在显示的视频上绘制某些遮盖或者实现某些透明功能时,鉴于wpf与winform渲染机制的差异,使用常规Panel.Zindex设置控件非层,注定失败。目前唯一的解决方式是借助第三方库,包裹住winrom控件。
3. 解决方案
为了解决winform控件置顶问题,需要把以下两个库引入项目中,并且在对应的winfrom控件上加上如下语句
3.1 引入命名控件:
dll下载地址:https://download.csdn.net/download/aniston_luo/16754486
xmlns:airspace="clr-namespace:Microsoft.DwayneNeed.Interop;assembly=Microsoft.DwayneNeed"
3.2 包裹winform控件
<airspace:AirspaceDecorator AirspaceMode="Redirect"
Name="myCam"
IsInputRedirectionEnabled="True"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
IsOutputRedirectionEnabled="True">
<WindowsFormsHost
MouseWheel="OnMouseWheelAdjustCam"
Name="pictureHost" Background="Transparent"
Visibility="Visible"
VerticalAlignment="Stretch">
<wf:PictureBox x:Name="PictureBoxDisplay" ></wf:PictureBox>
</WindowsFormsHost>
</airspace:AirspaceDecorator>
4. 总结
由于WPF与winform控件的兼容问题,故建议非必要情况下不使用WPF嵌入winform作为方案。
标签:控件,句柄,使用,WPF,置顶,winform 来源: https://blog.csdn.net/aniston_luo/article/details/115863091
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。