主要是最近的WPF項(xiàng)目中,用到了別的公司的東西,需要調(diào)用dll來使用該公司的控件。
在WPF中使用WinForm主要是以下幾個(gè)步驟:
- 添加引用
如果說需要在xaml中使用WinForm的控件,那么需要用到的是
- WindowsFormsIntegration
- System.Windows.Forms
- 添加了第一個(gè)引用之后,就能夠在xaml中使用WindowsFormsHost標(biāo)簽。
- 添加了第二個(gè)引用之后,你需要在xaml中聲明xmlns,然后就能使用WinForm的控件了。
xmlns:WinFormControls="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"`
<WindowsFormsHost>
<WinFormControls:Label Text="Hello World"/>
</WindowsFormsHost>
需要注意的是:
- WinForm會(huì)把你的整個(gè)層面給遮掉,就算你用ZIndex也沒用。蓋住就蓋住了,不顯示下面的東西
- 引用的第三方dll,需要在一開始的時(shí)候,使用Assembly.LoadFrom加載。不然中間可能運(yùn)行到一半的時(shí)候報(bào)錯(cuò)RE。
WinForm的覆蓋問題,解決的方法也是很無語的。解鈴還須系鈴人,WindowsFormsHost遮掉的東西,還是用WindowFormsHost顯示。原理就是,設(shè)置好大小,相互覆蓋(來啊,互相傷害?。?。
然后,WindowFormsHost除了放WinForm的控件之外,也可以放WPF的控件。就像這樣:
<WindowsFormsHost >
<ElementHost>
<StackPanel>
//這里放WPF的東西,比如這個(gè)StackPanel
//ElementHost就是承載WPF控件的東西
</StackPanel>
</ElementHost>
</WindowsFormsHost>
上面的就是套在WPF中的WinForm套用WPF的方法(繞口令~~~)。