2010-03-04 5 views
6

Ich habe versucht, ein .NET WinForms-Diagramm (Stephan Zimmermann Graph Display) in einem WPF-Fenster unter einem WindowsFormsHost (Ich habe sowohl System.Windows.Forms und WindowsFormsIntegration verwiesen).Einbetten von WinForms-Grafik in WPF-Fenster

Allerdings kann ich das Formularfeld sehen, aber nicht das Diagramm. Ich habe die Demo-Anwendung auf einem Windows-Formular ausgeführt und es funktionierte, aber als ich den gleichen Code in das WPF-Fenster übertrug, sah ich, dass die Daten aktualisiert, aber nicht in der Grafik angezeigt werden.

Vielen Dank im Voraus,

Yaron.

+0

Konnten Sie Ihren WPF-Code bekannt geben? – micahtan

Antwort

0

Legen Sie das Diagramm als untergeordnetes Objekt des WindowsFormsHost-Objekts fest.

+0

Schon getan, es hat nicht geholfen. Ich kann die Grafikaktualisierungen immer noch nicht sehen. –

14

Könnten Sie den folgenden Code ausprobieren und sehen, ob Sie ein Diagramm zur Anzeige bringen können und dann von dort aus arbeiten?

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> 

darauf achten, haben Sie Verweise auf:

% Programfiles% \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ Profil \ Client \ WindowsFormsIntegration.dll

% ProgramFiles% \ Referenz-Assemblys \ Microsoft \ Framework.NETFramework \ v4.0 \ Profil \ Client \ System.Windows.Forms.DataVisualization.dll

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

ich habe diese laufen nach schamlos Kopieren der folgenden link

1

Obwohl die Frage mehr als 6 Jahre alt ist ich ein ähnliches hatte (wenn nicht das gleiche Problem), wenn sie versuchen, um das Chart-Objekt zur Laufzeit zu erstellen und hinzuzufügen. Dank Bobwah Vorschlag ich das Problem isolieren konnte und fand, dass ich einfach eine Chartarea auf das Chart-Objekt hinzuzufügen, hatte das Diagramm zu sehen:

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 

Hoffe, dass es jemand hilft ...;)

0

I hatte das gleiche Problem in WPF. Zum Glück habe ich die Lösung.

Ich habe beobachtet, dass Diagrammbereiche und -serien zurückgesetzt werden, sobald die Datenquelle festgelegt wurde. Es sieht wie ein Fehler für mich aus.

Also die Problemumgehung/Lösung ist, die Datenquelle an erster Stelle zu setzen, bevor Sie die Dinge wie Diagrammbereiche und Serien hinzufügen.