WPF调用Win Form

原文: WPF调用Win Form

WPF是win form的下一代版本,现在越来越多的公司使用WPF。如何兼容已有的使用win form开发的应用程序呢?下面有三种方式来在WPF中调用win form。

使用WPF中的WindowsFormsHost控件来承载win form的控件或者控件库。

WindowsFormsHost是在WindowsFormsIntegration程序集中,位于System.Windows.Forms.Integration命名空间下面。此控件能够承载的是win form的单一控件或者复合控件,但是不能使用top-level的Form,否则会出现错误。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<Window x:Class= "WpfTest.MainWindow"
         xmlns= "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x= "http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:winform= "clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
         Title= "WPF Invoke winform" >
     <Grid>
         <Grid.RowDefinitions>
             <RowDefinition Height= "auto" />
             <RowDefinition Height= "*" />
         </Grid.RowDefinitions>
         <TextBlock Text= "this is only a test of wpf invoking win form" />
         <WindowsFormsHost Grid.Row= "1" x:Name= "wfh" >
             <winform:Button Text= "I am from win form" Click= "Button_Click_1" />
         </WindowsFormsHost>
     </Grid>
</Window>

  

使用WPF中的WindowsInteropHelper来定位和调用win form窗体。

WindowsInteropHelper是在PresentationFramework程序集中,位于System.Windows.Interop命名空间下面。它能够拿到WPF的窗体,并且通过IWin32Window来作为win form的载体。主要代码如下:

?
1
2
3
4
5
6
7
private void FirstWayToInvoke()
        {
            var form = WinformExample.Program.CreatInstance();
            WindowInteropHelper helper = new WindowInteropHelper( this );
            form.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
            form.Show( new WindowWapper(helper.Handle));
        }

使用Process来直接启动已经存在的win form应用程序。

主要是使用Process.Start()方法来启动一个进程,即win form应用程序。

?
1
2
3
4
private static void SecondWayToInvoke( string winformExePath)
         {
             Process.Start(winformExePath);
         }

具体例子:http://files.cnblogs.com/files/allanli/WpfTest.zip

猜你喜欢

转载自www.cnblogs.com/lonelyxmas/p/12294668.html