Embedding WinForms Graph in WPF Window
I've tried to embed a .NET WinForms gra开发者_高级运维ph (Stephan Zimmermann's Graph Display) in a WPF window, under a WindowsFormsHost (I've referenced both System.Windows.Forms and WindowsFormsIntegration).
However, I can see the form panel but not the graph. I've ran the demo application on a windows form and it worked, but when I transfered the same code to the WPF window, I saw that the data is updated but not shown on the graph.
Thank everyone in advance,
Yaron.
Could you try the following code and see if you can get a graph to display and then work from there?
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>
making sure you have references to:
%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
I have this running after shamelessly copying the following link
Although the question is more than 6 years old I had a similar (if not the same issue), when trying to create and add the Chart object at runtime. Thanks to Bobwah's suggestion I could isolate the problem and found that I simply had to add a ChartArea to the Chart object to see the graph:
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
Hope it helps someone... ;)
I had the same issue in WPF. Luckily I got the solution.
I observed that chart areas and series are being reset once the data source is set. It looks like a bug for me.
So, the workaround/solution is to set the data source at very first place before adding the things like chart areas and series.
Set the graph as the child of the WindowsFormsHost object.
精彩评论