Встраивание графа WinForms в окно WPF - PullRequest
9 голосов
/ 04 марта 2010

Я пытался встроить граф .NET WinForms (отображение графика Стефана Циммермана) в окне WPF под WindowsFormsHost (я ссылался как на System.Windows.Forms, так и на WindowsFormsIntegration).

Однако я вижу панель формы, но не график. Я запустил демонстрационное приложение в форме Windows, и оно сработало, но когда я перенес тот же код в окно WPF, я увидел, что данные обновляются, но не отображаются на графике.

Спасибо всем заранее,

Ярон.

Ответы [ 4 ]

18 голосов
/ 26 марта 2012

Не могли бы вы попробовать следующий код и посмотреть, сможете ли вы получить график для отображения, а затем работать оттуда?

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% \ Справочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ WindowsFormsIntegration.dll

% ProgramFiles% \ Справочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ System.Windows.Forms.DataVisualization.dll

% ProgramFiles% \ Справочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ System.Windows.Forms.dll

У меня это работает после бесстыдного копирования следующей ссылки

2 голосов
/ 15 апреля 2016

Хотя вопрос более 6 лет, у меня была похожая (если не та же проблема), при попытке создать и добавить объект Chart во время выполнения. Благодаря предложению Бобвы я смог изолировать проблему и обнаружил, что мне просто нужно добавить 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

Надеюсь, это кому-нибудь поможет ...;)

1 голос
/ 11 февраля 2017

У меня была такая же проблема в WPF. К счастью, я получил решение.

Я заметил, что области и серии диаграмм сбрасываются после установки источника данных. Это похоже на ошибку для меня.

Итак, обходной путь / решение состоит в том, чтобы установить источник данных на самом первом месте, прежде чем добавлять такие вещи, как области диаграммы и серии.

0 голосов
/ 04 марта 2010

Установить график как дочерний объект объекта WindowsFormsHost.

...