在WPF窗口中嵌入WinForms图

时间:2010-03-04 08:42:25

标签: wpf winforms graph integration charts

我试图在WPF窗口中嵌入一个.NET WinForms图形(Stephan Zimmermann的图形显示),在WindowsFormsHost下(我已经引用了System.Windows.Forms和WindowsFormsIntegration)。

但是,我可以看到表单面板而不是图表。我在Windows窗体上运行了演示应用程序,但是当我将相同的代码传输到WPF窗口时,我看到数据已更新但未在图表上显示。

提前感谢大家,

亚龙。

4 个答案:

答案 0 :(得分:18)

您是否可以尝试以下代码,看看是否可以显示图表然后从那里开始工作?

MainWindow.xaml.cs

using System.Collections.Generic;
using System.Windows.Forms.DataVisualization.Charting;
using System.Windows;

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        Dictionary<int, double> value;
        public MainWindow()
        {
            InitializeComponent();

            value = new Dictionary<int, double>();
            for (int i = 0; i < 10; i++)
                value.Add(i, 10 * i);

            Chart chart = this.FindName("MyWinformChart") as Chart;
            chart.DataSource = value;
            chart.Series["series"].XValueMember = "Key";
            chart.Series["series"].YValueMembers = "Value";
        }
    }
}

MainWindow.xaml

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:winformchart="clr-namespace:System.Windows.Forms.DataVisualization.Charting;assembly=System.Windows.Forms.DataVisualization"
    Title="MainWindow" Height="392" Width="525">
    <StackPanel>

        <WindowsFormsHost x:Name="host" Height="300">
            <winformchart:Chart x:Name="MyWinformChart" Dock="Fill">
                <winformchart:Chart.Series>
                    <winformchart:Series Name="series" ChartType="Line"/>
                </winformchart:Chart.Series>
                <winformchart:Chart.ChartAreas>
                    <winformchart:ChartArea/>
                </winformchart:Chart.ChartAreas>
            </winformchart:Chart>
        </WindowsFormsHost>

    </StackPanel>
</Window>

确保您参考:

%ProgramFiles%\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ WindowsFormsIntegration.dll

%ProgramFiles%\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ System.Windows.Forms.DataVisualization.dll

%ProgramFiles%\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ System.Windows.Forms.dll

我在无耻地复制以下link

后运行

答案 1 :(得分:2)

虽然问题已超过6年,但在尝试在运行时创建和添加Chart对象时,我遇到了类似的问题(如果不是同一个问题)。 感谢Bobwah的建议,我可以找出问题并发现我只需要将ChartArea添加到Chart对象中以查看图表:

Chart chart = new Chart();
chart.ChartAreas.Add("MainChartArea"); //this was missing
chart.Series.Add(getSeries());
chart.Dock = System.Windows.Forms.DockStyle.Fill;
host.Child = chart; //'host' is the WPF-WindowsFormsHost control

希望它可以帮助某人......;)

答案 2 :(得分:1)

我在WPF中遇到了同样的问题。幸运的是我得到了解决方案。

我发现,一旦设置了数据源,图表区域和系列就会被重置。对我来说这看起来像个错误。

因此,解决方法/解决方案是在添加图表区域和系列之类的内容之前将数据源设置在第一位。

答案 3 :(得分:0)

将图形设置为WindowsFormsHost对象的子图形。