分享

C#下WPF中调用WinForm控件

 芥子c1yw3tb42g 2023-11-02 发布于陕西
最近在C#下调用NPlot生成股票K线图,由于用的WPF框架,而NPlot是基于WinForm开发的。所以不能直接引用。具体做法如下:   NPlot源码Microsoft .NET Framework 4.5版
1、引入DLL
创建工程后需要引入WindowsFormsIntegration.dll和System.Windows.Forms.dll两个Dll。WindowsFormsIntegration.dll负责整合WPF和Windows。
2、在xaml中添加命名空间标签
xmlns : WinFormIntegration ='clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration'
3、添加宿主容器
< WinFormIntegration : WindowsFormsHost x : Name ='winFormsHost' Grid.Row ='1' Width ='Auto' Grid.ColumnSpan ='2'>
      <!--在此添加WinForm控件-->
</ WinFormIntegration : WindowsFormsHost >
本例完整的xaml文件:
< Window x : Class ='AxyDeal.MainWindow'
        xmlns : x =' http://schemas.microsoft.com/winfx/2006/xaml' ;
        Title ='MainWindow' Height ='600' Width ='1080'
        xmlns : local ='clr-namespace:AxyDeal.comcontrol'
         xmlns : WinFormIntegration ='clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration'
        >
    < Grid >
        < DockPanel >
            < Menu DockPanel.Dock ='Top'>
                < MenuItem Header ='文件'>
                    < MenuItem Header ='打开'>
                        < MenuItem Header ='1.txt'></ MenuItem >
                        < MenuItem Header ='2.txt'></ MenuItem >
                        < MenuItem Header ='3.txt'></ MenuItem >
                    </ MenuItem >
                    < MenuItem Header ='退出' Name ='miExit' Click ='miExit_Click'></ MenuItem >
                </ MenuItem >
                < MenuItem Header ='编辑'>
                    < MenuItem Header ='复制'></ MenuItem >
                    < MenuItem Header ='粘贴'></ MenuItem >
                </ MenuItem >
            </ Menu >
            < ToolBar DockPanel.Dock ='Top' Height ='40'>
                < Button >
                    < Image Source ='images/logo_email.png'></ Image >
                </ Button >
                < Button >
                    < Image Source ='images/logo_dropbox.png'></ Image >
                </ Button >
                < Button >
                    < Image Source ='images/logo_evernote.png'></ Image >
                </ Button >
            </ ToolBar >
            < TabControl DockPanel.Dock ='Left' >
                < TabItem Header ='TabItem'>
                    < Grid Background ='#FFE5E5E5'/>
                </ TabItem >
                < TabItem Header ='TabItem'>
                    < Grid Background ='#FFE5E5E5'/>
                </ TabItem >
            </ TabControl >
            < Grid Height ='Auto' Width ='Auto'   Background ='AliceBlue'>
                < Grid.RowDefinitions >
                    < RowDefinition Height ='Auto'></ RowDefinition >
                    < RowDefinition ></ RowDefinition >
                </ Grid.RowDefinitions >
                < Grid.ColumnDefinitions >
                    < ColumnDefinition ></ ColumnDefinition >
                    < ColumnDefinition ></ ColumnDefinition >
                </ Grid.ColumnDefinitions >
                < local : TickerControl x : Name ='tickerControl' Grid.Row ='0' Height ='50' Grid.ColumnSpan ='2' Grid.RowSpan ='1' Width ='686' VerticalAlignment ='Top' HorizontalAlignment ='Center' Visibility ='Visible' Margin ='1,0,0,0' ></ local : TickerControl >
                < WinFormIntegration : WindowsFormsHost x : Name ='winFormsHost' Grid.Row ='1' Width ='Auto' Grid.ColumnSpan ='2'>
                    <!--在此添加WinForm控件-->
                </ WinFormIntegration : WindowsFormsHost >               
            </ Grid >
        </ DockPanel >
    </ Grid >
</ Window >
4、在代码中引入WinForm控件
这里声明了两个要引入的变量
//Form实例
private Form kLineForm = new Form();
//要引入的NPlot控件
private NPlot.Windows.PlotSurface2D KLinePS;
然后在MainWindow方法中添加:
//把Form添加的xaml中创建的宿主容器
this.winFormsHost.Child = this.kLineForm;
KLinePS = new NPlot.Windows.PlotSurface2D();
//把NPlot控件添加的Form中
this.kLineForm.Controls.Add(this.KLinePS);
至此可以在WPF中任意使用NPlot了。
使用NPlot是一款免费又开源.Net平台下的图表控件,能做各种曲线图,柱状图,饼图,散点图,股票图等。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多