天天看點

WPF嵌入Winform控件置頂問題1. 引言2. 問題分析3. 解決方案4. 總結

WPF嵌入Winform控件置頂問題

  • 1. 引言
  • 2. 問題分析
  • 3. 解決方案
  • 4. 總結

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作為方案。

繼續閱讀