Построение графиков на WPF форме под .NET Framework 4

в 19:05, , рубрики: .net, .net framework 4.0, charts, windows forms, wpf, метки: , , ,

Под .NET существует множество библиотек для построения графиков. Выбор в сторону решения от Microsoft подкупил тем, что оно встроено в .NET Framework 4 и потому не требует подключения сторонних библиотек. Хотя есть и один недостаток — работать с ним можно только на форме Windows Forms, что полностью игнорирует WPF формы. Из-за этого все мануалы, начинающиеся словами «перетащите компонент Chart на форму» шли лесом абсолютно не помогали решить поставленную проблему.

Сначала необходимо было решить, каким образом использовать компоненты Windows Forms на WPF форме. Для этого судя по инструкции с MSDN необходимо добавить ссылку на WindowsFormsIntegration и на System.Windows.Forms. Также необходимо добавить их пространства имен в элемент <Window> XAML-документа формы, и элемент <WindowsFormsHost>, в котором впоследствии будет размещаться нужный компонент Windows Forms:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms">
<StackPanel>
<WindowsFormsHost></WindowsFormsHost>
</StackPanel>
</Window>

Теперь все готово к использованию компонентов Windows Forms, но всю работу по внедрению компонента на форму придется делать вручную. Подключим к проекту System.Windows.Forms.DataVisualization.Charting, добавим пространство имен в XAML-документ и сам компонент на форму.

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
...
xmlns:dvc="clr-namespace:System.Windows.Forms.DataVisualization.Charting; assembly=System.Windows.Forms.DataVisualization">
<StackPanel>
<WindowsFormsHost><dvc:Chart x:Name="chart" /></WindowsFormsHost>
</StackPanel>
</Window>

Есть замечательный проект от Microsoft, содержащий массу примеров работы с компонентом Chart для Windows Forms. Но запустить его получится не сразу, так как нужный для инициализации компонента код под Windows Forms среда генерирует в методе InitializeComponent() сама на основе сделанных разработчиком настроек компонента. Я не нашел способа вызова конфигуратора компонента для WPF формы, поэтому прежде чем использовать код из примеров, надо будет вручную дописать пару строк кода.

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

private void Window_Loaded(object sender, RoutedEventArgs e)
{
// Все графики находятся в пределах области построения ChartArea, создадим ее
chart.ChartAreas.Add(new ChartArea("Default"));

// Добавим линию, и назначим ее в ранее созданную область "Default"
chart.Series.Add(new Series("Series1"));
chart.Series["Series1"].ChartArea = "Default";
chart.Series["Series1"].ChartType = SeriesChartType.Line;

// добавим данные линии
string[] axisXData = new string[] {"a", "b", "c"};
double[] axisYData = new double[] {0.1, 1.5, 1.9};
chart.Series["Series1"].Points.DataBindXY(axisXData, axisYData);

// нарисуем график
chart.DataBind();
}

В результате получим замечательный график, и главное никаких сторонних библиотек:

image

Автор: mayhem

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js