zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    matplotlib-2D绘图库-面向对象
    C 指针
    POCO库中文编程参考指南(8)丰富的Socket编程
    POCO C++ SOCKET
    c++ poco StreamSocket tcpclient测试用例
    用OpenLayers开发地图应用
    Nginx-rtmp模块实现流媒体play、push、pull功能
    使用pjsip传输已经编码的视频,源码在github
    ReSIProcate源码目录下功能说明
    resiprocate使用入门:内网搭建基于repro的sipproxy测试环境
  • 原文地址:https://www.cnblogs.com/Daywei/p/3032670.html
Copyright © 2011-2022 走看看