如何在WPF中调用Winform控件

Crossbow, OMG, WTF?
    Well, Crossbow is the codename for the interoperability technology between Windows Forms and Windows Presentation Foundation. Crossbow enables you to host Windows Forms control in your WPF application, and vice versa. In this post, I will demonstrate how to use Windows Forms control in WPF application, in my next post, I will demonstrate another simple ridiculous Windows Forms application which will host Windows Presentation Foundation controls.
    So, the first step is to add some assembly reference into your WPF application project. there are two important assemblies you should include, they are WindowsFormsIntegration.dll and System.Windows.Forms.dll, after you're done with this, you can reference Windows.Forms.Integration and System.Windows.Forms namespaces in the Xaml code as follows:
< Window  x:Class ="CrossBowDemo.MainWindow"
    xmlns:wfi 
="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
    xmlns:wf 
="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
    Title
="Hosting Windows Forms Control In WPF"  
    Height
="300"  
    Width
="650"  
    ResizeMode
="NoResize"
    Loaded
="WindowLoadedHandler"  
    
>
  
< DockPanel >
    
< wfi:WindowsFormsHost >
       
<!--  Set some properties on Windows Forms control in Xaml  -->
      
< wf:DataGridView  x:Name ="dataGridView"  Dock ="Fill"  SelectionMode ="FullRowSelect" />
    
</ wfi:WindowsFormsHost >
  
</ DockPanel >
</ Window >

    Note that I declare two additional Xml namespace references in Xaml so that the Xaml parser knows how to parse the Windows Forms control tag.

xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
xmlns:wf ="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"

     Then you should declare the WindowsFormsHost control in the Xaml, this control acts like a sticky point between WPF and Windows Forms.
    After that, you can declare any Windows Forms control within the
WindowsFormsHost control, here we add a DataGridView control for displaying the profiles of some famous soccer players.

< wfi:WindowsFormsHost >
       
<!--  Set some properties on Windows Forms control in Xaml  -->
      
< wf:DataGridView  x:Name ="dataGridView"  Dock ="Fill"  SelectionMode ="FullRowSelect" />
    
</ wfi:WindowsFormsHost >

    Note that you can declaratively set the properties of Windows Forms control(a.k.a DataGridView) in Xaml. and of course you can also set this control's properties in code, here we set additional DataGridView's propeties in code, and then bind the profile data with this control, all those plumbing code should be in the Window's Loaded event handler method:

private   void  WindowLoadedHandler(Object sender, EventArgs e)
        {
            
//  Set some properties on Windows Forms control in code.
            dataGridView.AlternatingRowsDefaultCellStyle.BackColor  =  GdiPlus::SystemColors.InactiveCaptionText;
            dataGridView.AllowUserToAddRows 
=   true ;

            
//  Load players information.
            DataSet ds  =   new  DataSet();
            ds.ReadXml(
" ..\\..\\players.xml " );
            playerBindingSource 
=   new  Winforms::BindingSource(ds,  " player " );
            dataGridView.DataSource 
=  playerBindingSource;
        }

    Note that you cannot move the above code into the Window's constructor, if you do so, an exception will be thrown.
    Okay, this is all what we should do for hosting Windows Forms control in WPF, let's see our little application in action:



    For complete source code, please check here

转载于:https://www.cnblogs.com/myoungho/archive/2009/03/31/1425752.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值