• Winform直接与Wpf交互


    Winform项目中,可以直接使用wpf中的自定义控件和窗体

    测试环境:

    vistual studio 2017

    window 10

    一    winform直接使用wpf的自定义控件

    步骤如下:

    1  新建winfrom项目,名为WinFormDemo,默认有一个名为Form1的窗体,先不要动它

    2  想要在winform项目中直接使用wpf的东西,需要添加引用:

    PresentationCore.dll     PresentationFramework.dll   WindowsBase.dll

    如果不记得要添加那个dll,有个比较快的方式就是,在为项目添加新建项的时候,选择'用户控件(WPF)'模板,点击确定后,会自动帮你添加引用,这样就不用自己手工引用了,如下图:

    3   添加Wpf自定义控件UserControl1.xaml(在步骤2已经添加了),并编辑如下:

    UserControl1.xaml的前台代码如下:

    对应的后台代码UserControl1.xaml.cs如下:

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Windows;
    6. using System.Windows.Controls;
    7. using System.Windows.Data;
    8. using System.Windows.Documents;
    9. using System.Windows.Input;
    10. using System.Windows.Media;
    11. using System.Windows.Media.Imaging;
    12. using System.Windows.Navigation;
    13. using System.Windows.Shapes;
    14. namespace WinFormDemo
    15. {
    16. ///
    17. /// UserControl1.xaml 的交互逻辑
    18. ///
    19. public partial class UserControl1 : UserControl
    20. {
    21. public UserControl1()
    22. {
    23. InitializeComponent();
    24. }
    25. private void BtnEnter_Click(object sender, RoutedEventArgs e)
    26. {
    27. MessageBox.Show("确定1按钮按下");
    28. }
    29. }
    30. }

    4  生成本项目(一定要先生成项目),然后打开winform默认新建Form1的设计器,在右边的工具箱,可以看到控件UserControl1了,然后把它拽进Form1窗体里面,如下图:

    5  再生成项目,运行后点击'确定1'按钮运行结果如下:

    不过通过观察后发现,运行的程序有很明显的卡顿

    二  winform直接使用wpf的窗体

    winfrom通过新建项的方式不能直接新建wpf窗体,但我们可以使用新建的wpf的用户控件,然后略做修改就行,当然你也可以添加已有的wpf窗体,这样就可以省略2.1步骤的操作。

    2.1   在前文的基础上继续操作(当然咯,这三个PresentationCore.dll    PresentationFramework.dll   WindowsBase.dll引用是少不了的),新建项,模板选择'用户控件(WPF)',名称为WindowTest

    修改WindowTest.xaml:

    把根标签UserControl修改为Window,并按照如下图,在Grid标签中新增内容如下:

    按照如下要求修改后台代码WindowTest.xaml.cs:

    2.2   在winfrom的Button按钮事件中触发弹出wpf窗体,在Form1窗体中拽入winform的Button控件,按钮名称为'弹出wpf窗体',控件名称为btnWpf,事件名称为btnWpf_Click,如下图:

    以模态的方式弹出wpf窗体(即ShowDiaglog),如下图:

    运行结果如下图:

    以非模态的方式(即Show的方式)弹出wpf窗体

    发现Wpf窗体中的TextBox在英文输入法的情况下,输入不了字母和数字

    查阅资料后发现,在Show前需要添加这一句代码:

    System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(windowTest);

    完整如下图:

    加上后,再次运行,这样一切都正常了。

  • 相关阅读:
    信号类型(雷达)——连续波雷达(二)
    城市公安可视化大数据展示平台预测预警,防患未然
    桥式整流电路
    Java面向对象
    Java常见的两种加密方式
    包管理机制、变量声明方式的区别
    痞子衡嵌入式:说说职业生涯第一个十年
    uni-app(三):离线打包与插件引用(Android)
    mysql建数据库时我们的字符集如何选择
    linux-4.19 内存之页面回收
  • 原文地址:https://blog.csdn.net/zxy13826134783/article/details/133030087