Используем компоненты FastReport .NET в WPF приложениях

21.08.2017

Сегодня я расскажу вам, как в приложении WPF (Windows Presentation Fundation) использовать контролы FastReport .NET, предназначенные для приложений WindowsForms. На самом деле все просто. Wpf приложения позволяют использовать WinForms контролы, также как и WinForms приложения позволяют использовать Wpf контролы. Для этого предусмотрены специальные компоненты – хосты. В частности WindowsFormsHost – компонент предназначенный для отображения контролов WindowsForms в приложении WPF.

Создаем проект WPF. Для начала добавим FastReport.dll в Reference.

На главную форму перетаскиваем компонент Button из палитры инструментов. В инспекторе свойств меняем ее Caption на Run Report Designer:

 

Так же создаем еще одну кнопку с текстом Run Report Preview:

Каждая кнопка будет запускать отдельную форму. На первой форме мы разместим компонент Designer, а на второй – Preview. Добавим новую форму (окно). Сделать это можно кликнув правой кнопкой  мыши по названию проекта в обозревателе решения. Из контекстного меню выбираем Add->Window. Назовем окно Designer.xaml.

Таким же способом добавим еще одно окно. Назовем его Preview.xaml.

Переходим к Designer.xaml. Перетащим на форму компонент WindowsFormsHost из палитры инструментов.

 

Вот так он выглядит:

 

Обязательно нужно задать имя этого компонента в инспекторе свойств. Изначально оно не определено. Я не стал фантазировать и назвал его WindowsFormsHost1.

 

В нижней части студии вы увидите xml код шаблона окна. Нас интересует код добавленного компонента:

1
2
3
4
5

 <Grid>
 <WindowsFormsHost x:Name="WindowsFornsHost1" HorizontalAlignment="Left" Height="100" Margin="10,10,0,0" VerticalAlignment="Top" Width="100"/>
 </Grid>

Как видите, много атрибутов отвечает за расположение компонента на форме. Давайте удалим все атрибуты в теге WindowsFormsHost,  кроме имени:

1
2
3
<Grid>
 <WindowsFormsHost x:Name="WindowsFornsHost1" />
 </Grid>

Теперь компонент будет растянут по ширине и высоте окна:

 

Открываем редактор кода для этого окна (правой кнопкой по форме - ViewCode).

Прописываем библиотеку FastReport:

1
using FastReport;

В классе формы мы создадим экземпляр объекта DesignerControl и присвоим его WindowsFormsHost1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 public partial class Designer : Window
 {
 FastReport.Design.StandardDesigner.DesignerControl designer = new FastReport.Design.StandardDesigner.DesignerControl();
 Report report1 = new Report();
 
 public Designer()
 {
 InitializeComponent();
 designer.Report = report1;
 designer.RefreshLayout();
 WindowsFormsHost1.Child = designer;
 }
 }
}

Так как дизайнер должен отображать отчет, хотя бы пустой, мы создали также экземпляр объекта Report и загрузили его в дизайнер. Затем обновляем дизайнер и присваиваем нашему хосту объект дизайнера.

Переходим к окну Preview.xaml. Как и в предыдущем окне мы добавляем компонент WindowsFormsHost на форму и даем ему имя WindowsFormsHost2. Убираем атрибуты, отвечающие за размер и расположение компонента. Открываем редактор кода для этого окна.

Добавляем библиотеку FastReport:

1
using FastReport;

В классе, создаем экземпляр объекта PrewiewControl и экземпляр объекта Report. Нам нужно загрузить существующий отчет и присвоить объекту Report созданный preview.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public partial class Preview : Window
 {
 FastReport.Preview.PreviewControl prew = new FastReport.Preview.PreviewControl();
 Report report = new Report();
 
 public Preview()
 {
 InitializeComponent();
 report.Load(@"J:\Program Files (x86)\FastReports\FastReport.Net\Demos\Reports\Text.frx");
 report.Preview = prew;
 report.Prepare();
 report.ShowPrepared();
 WindowsFormsHost2.Child = prew;
 }

После присвоения превью отчету, мы строим отчет и отображаем. В последней строке кода мы присвоили хосту объект Preview.

 Приложение почти готово. Возвращаемся на главную форму с кнопками. Выбираем первую кнопку. В инспекторе свойств переключаемся на События (Events). И создаем событие Click с помощью двойного клика, простите за тавтологию:

   

Добавляем простой код:

1
2
3
4
5
 private void button_Click(object sender, RoutedEventArgs e)
 {
 Designer dsg = new Designer();
 dsg.Show();
 }

Здесь мы создали экземпляр окна Designerи отобразили его. Аналогичным образом создаем событие Clickдля второй кнопки:

1
2
3
4
5
 private void button1_Click(object sender, RoutedEventArgs e)
 {
 Preview prew = new Preview();
 prew.Show();
 }

Создаем экземпляр окна Preview и отображаем его. Запустим наше приложение:

 

Нажимаем первую кнопку, и получаем окно дизайнера:

Закрываем его и нажимаем вторую кнопку. И получаем отчет в режиме предварительного просмотра:

 

Вот и все. Согласитесь, все достаточно просто благодаря использованию WindowsFormsHost.

.NET FastReport WPF .NET FastReport WPF
10 июля 2026

Как настроить Content Security Policy для отчетов FastReport .NET WEB

Узнайте, как настроить Content Security Policy для отчётов FastReport .NET WEB: обзор директив и значений CSP, изменения в архитектуре FastReport, типичные сценарии обхода и способы защиты.
22 июня 2026

Как настроить отчет с Business Objects из кода и дизайнера в FastReport .NET

В этой статье рассматривается реальный пример создания и использования шаблона отчета .frx для подключения к иерархическим бизнес-объектам в FastReport .NET.
21 апреля 2026

Использование водяных знаков в FastReport VCL

В статье подробно рассмотрели функционал добавления водяных знаков в FastReport VCL — как через визуальный интерфейс, так и программно, с помощью кода на Delphi и в скриптах отчётов.

Не является публичной офертой
© 1998-2026 ООО «Быстрые отчеты»