zoukankan      html  css  js  c++  java
  • 在WPF中使用WinForm控件方法

    下面以在Wpf中添加ZedGraph(用于创建任意数据的二维线型、条型、饼型图表的一个开源类库)控件,说明在WPF中使用Winform控件的方法。

    1、      首先添加对如下两个dll文件的引用:WindowsFormsIntegration.dllSystem.Windows.Forms.dll

    2、      由于要用到ZedGraph控件,所以也要添加对ZedGraph.dll的引用。

    3、      在要使用WinForm控件的WPF窗体的XAML文件中添加如下内容(选中部分):

     

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

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

    xmlns:zedgraph="clr-namespace:ZedGraph;assembly=ZedGraph"

    4、       WPF的容器控件内如Grid内首先要添加WinForm控件的宿主容器,用于衔接WPFWinForm

    对应XAML如下:

    <Grid>

            <wfi:WindowsFormsHost Width="300" HorizontalAlignment="Right">

                <wf:Label x:Name="lblName" Text="winForm控件在此” />

            </wfi:WindowsFormsHost>

            <wfi:WindowsFormsHost>

                <wf:Button x:Name="nnn" Text="确定”/>

            </wfi:WindowsFormsHost>

            <wfi:WindowsFormsHost>

                <zedgraph:ZedGraphControl x:Name="zedGraphControl" />

            </wfi:WindowsFormsHost>

            <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />

        </Grid>

    说明:<wfi:WindowsFormsHost></wfi:WindowsFormsHost>即为WinForm控件的宿主容器,每一个宿主容器只能放一个WinForm控件,如下例,放了三个WinForm控件,分别放在三个宿主容器里面,该容器可以设置属性来调整大小和布局。

    注意:如上我添加的WinForm控件如在指定其Name时,必须加前缀x:,如添加Lable<wf:Label x:Name="lblName" Text="我是WPF中的WinForm控件” />否则后台代码无法访问。

    5、       如果要在WPF后台代码中访问上面的Lable,可直接像在WinForm中使用一样。如在点击某一按钮时改变Lable内容,代码如下:lblName.Text=”内容已改变”;

    6、       以使用WinForm控件ZedGraph绘制曲线为例,说明后台用法:

    在后台用Using添加对System.Windows.FormsZedGraphSystem.Drawing命名空间的引用,完整后台代码如下:

    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;

     

    using System.Windows.Forms;

    using ZedGraph;

    using System.Drawing;

     

    namespace ZedGraphAtWpf2

    {

        /// <summary>

        /// MainWindow.xaml 的交互逻辑

        /// </summary>

        public partial class MainWindow : Window

        {

            public MainWindow()

            {

                InitializeComponent();

            }

     

            private void button1_Click(object sender, RoutedEventArgs e)

            {

                lblName.Text =”我是WinForm控件”;

            }

     

            private void Window_Loaded(object sender, RoutedEventArgs e)

            {

                ZedGraph.GraphPane myPane = zedGraphControl.GraphPane;

     

                myPane.Title.Text = "My Test Graph/n(For CodeProject Sample)";

                myPane.XAxis.Title.Text = "My X Axis";

                myPane.YAxis.Title.Text = "My Y Axis";

     

                PointPairList list1 = new PointPairList();

                PointPairList list2 = new PointPairList();

                for (int i = 0; i < 36; i++)

                {

                    double x = (double)i + 5;

                    double y1 = 1.5 + Math.Sin((double)i * 0.2);

                    double y2 = 3.0 * (1.5 + Math.Sin((double)i * 0.2));

                    list1.Add(x, y1);

                    list2.Add(x, y2);

                }

     

                // Generate a red curve with diamond

                // symbols, and "Porsche" in the legend

                LineItem myCurve = myPane.AddCurve("Porsche",

                    list1, System.Drawing.Color.Red, SymbolType.Diamond);

     

                // Generate a blue curve with circle

                // symbols, and "Piper" in the legend

                LineItem myCurve2 = myPane.AddCurve("Piper",

                    list2, System.Drawing.Color.Blue, SymbolType.Circle);

     

                zedGraphControl.AxisChange();

            }

        }

    }

    完整XAML如下:

    <Window x:Class="ZedGraphAtWpf2.MainWindow"

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

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

            xmlns:zedgraph="clr-namespace:ZedGraph;assembly=ZedGraph"

            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

            Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">

        <Grid>

            <wfi:WindowsFormsHost Width="300" HorizontalAlignment="Right">

                <wf:Label x:Name="lblName" Text="WinForm控件在此” />

            </wfi:WindowsFormsHost>

            <wfi:WindowsFormsHost>

                <wf:Button x:Name="nnn" Text="确定” />

            </wfi:WindowsFormsHost>

            <wfi:WindowsFormsHost>

                <zedgraph:ZedGraphControl x:Name="zedGraphControl" />

            </wfi:WindowsFormsHost>

            <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />

        </Grid>

    </Window>

  • 相关阅读:
    C++学习笔记十关联容器
    Ubuntu下使用GDB断点Go程序
    各种语言的数字转罗码方法的实现
    为什么 ++i和i++的效果是一样的,试了javascript ,c++ java
    罗马数字转换阿拉伯数字(Java版,考虑较为全面)
    C++学习笔记九顺序容器(二) ForFreeDom 博客园
    智立方 屁话真言108:能盛事者能成事_智立方的杨石头_新浪博客
    腾讯搜搜高管吴军离职的传闻与真相
    罗马数字_百度百科
    快速深入一门语言的几个问题 Shell909090 随笔杂记
  • 原文地址:https://www.cnblogs.com/liancs/p/3879317.html
Copyright © 2011-2022 走看看