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)'模板,点击确定后,会自动帮你添加引用,这样就不用自己手工引用了,如下图:

Winform直接与Wpf交互_第1张图片

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

UserControl1.xaml的前台代码如下:

Winform直接与Wpf交互_第2张图片

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WinFormDemo
{
    /// 
    /// UserControl1.xaml 的交互逻辑
    /// 
    public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
        }

        private void BtnEnter_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("确定1按钮按下");
        }
    }
}

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

Winform直接与Wpf交互_第3张图片

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

Winform直接与Wpf交互_第4张图片

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

二  winform直接使用wpf的窗体

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

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

Winform直接与Wpf交互_第5张图片

修改WindowTest.xaml:

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

Winform直接与Wpf交互_第6张图片

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

Winform直接与Wpf交互_第7张图片

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

Winform直接与Wpf交互_第8张图片

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

Winform直接与Wpf交互_第9张图片

运行结果如下图:

Winform直接与Wpf交互_第10张图片

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

Winform直接与Wpf交互_第11张图片

Winform直接与Wpf交互_第12张图片

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

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

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

完整如下图:

Winform直接与Wpf交互_第13张图片

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

你可能感兴趣的:(C#编程,wpf,wpf,winform,C#,交互)