WPF使用Winform控件问题

这是个很大问题,细节问题比较多,以后会在这里总结使用过程中的问题。

1.wpf使用winform自身的控件

这个应该没什么大问题,直接用上篇文章提到的WindowsFormsHost,当然这不能解决所有的问题,比如文章中提到的Winform控件的mousewheel事件无法响应,这只是我遇到的,不光是我这里MouseWheel in WindowsFormsHost也有说明,但都不是最好的解决方法。这是.Net的缺陷,应该会在下一个版本中修复。上篇文章中也引用高手的解决方法了,大家可以借鉴,但我觉得太繁琐了,遇到这样的问题我就避开它。

2.wpf使用winform用户控件

     WindowsFormsHost元素的一个最重要的限制是它只能包含一个Windows窗体控件。为了补偿,可以使用Windows窗体包容器控件。不过,Windows窗体包容器控件不支持XAML模型,所以需要以编程的方式填充包容器控件的内容。更好的方法是创建一个Windows窗体用户控件。可以在一个引用的单独的程序集中定义用户控件,或者可以直接将它添加到WPF项目中。这种方法提供了两个最佳功能——为用户控件提供了全部的设计时支持,并且提供了一个很容易的方法将用户控件集成到wpf窗口中。实际上,使用用户控件可以提供额外的抽象层,这与使用单独的窗口类似。因为包含用户控件的wpf窗口不能访问用户控件的单个控件。反而,它将于添加到用户控件的更高层次的属性进行交互,然后这些属性修改内部控件。这样会得到更好的封装性,并且更简单,因为这样可以在wpf窗口和自定义的windows窗体内容之间限制交互范围。这种方法还使得将来迁移到只用wpf元素的解决方案更加容易,可以简单地创建一个具有相同属性的wpf用户控件,并替换合适的WindowsFormsHost控件

在WPF项目中新建立一个Winform的用户控件,在WPF窗体内添加WindowsFormsHost控件,WindowsFormsHost控件可以放winform用户控件。

WinformUserControl wfuc = new WinformUserControl();
uswf.Child = wfuc;



---XAML------------------------------------
<WindowsFormsHost Name="uswf">
</WindowsFormsHost>

就这样很简单

Reference:WPF 浏览PDF 文件

技术追求卓越 梦想创造未来 ——Daywei

原文地址:https://www.cnblogs.com/Daywei/p/3032670.html