主要是最近的WPF项目中,用到了别的公司的东西,需要调用dll来使用该公司的控件。
在WPF中使用WinForm主要是以下几个步骤:
- 添加引用
如果说需要在xaml中使用WinForm的控件,那么需要用到的是
- WindowsFormsIntegration
- System.Windows.Forms
- 添加了第一个引用之后,就能够在xaml中使用WindowsFormsHost标签。
- 添加了第二个引用之后,你需要在xaml中声明xmlns,然后就能使用WinForm的控件了。
xmlns:WinFormControls="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"`
<WindowsFormsHost>
<WinFormControls:Label Text="Hello World"/>
</WindowsFormsHost>
需要注意的是:
- WinForm会把你的整个层面给遮掉,就算你用ZIndex也没用。盖住就盖住了,不显示下面的东西
- 引用的第三方dll,需要在一开始的时候,使用Assembly.LoadFrom加载。不然中间可能运行到一半的时候报错RE。
WinForm的覆盖问题,解决的方法也是很无语的。解铃还须系铃人,WindowsFormsHost遮掉的东西,还是用WindowFormsHost显示。原理就是,设置好大小,相互覆盖(来啊,互相伤害啊)。
然后,WindowFormsHost除了放WinForm的控件之外,也可以放WPF的控件。就像这样:
<WindowsFormsHost >
<ElementHost>
<StackPanel>
//这里放WPF的东西,比如这个StackPanel
//ElementHost就是承载WPF控件的东西
</StackPanel>
</ElementHost>
</WindowsFormsHost>
上面的就是套在WPF中的WinForm套用WPF的方法(绕口令~~~)。
网友评论