Ejemplo n.º 1
0
        public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata)
        {
            var element = new PrintElementItalic();

            BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyTextProperties(element, elementMetadata);

            BuildHelper.ApplyInlineProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyInlineProperties(element, elementMetadata);

            // Генерация содержимого элемента

            var inlines = buildContext.ElementBuilder.BuildElements(buildContext, elementMetadata.Inlines);

            if (inlines != null)
            {
                foreach (var inline in inlines)
                {
                    element.Inlines.Add(inline);
                }
            }

            BuildHelper.PostApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.PostApplyTextProperties(element, elementMetadata);

            return(element);
        }
Ejemplo n.º 2
0
        public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata)
        {
            var element = new PrintElementParagraph
            {
                Margin  = BuildHelper.DefaultMargin,
                Padding = BuildHelper.DefaultPadding
            };

            BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyTextProperties(element, elementMetadata);

            BuildHelper.ApplyBlockProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyBlockProperties(element, elementMetadata);

            ApplyIndent(element, elementMetadata);

            // Генерация содержимого элемента

            var contentContext = CreateContentContext(element, buildContext);
            var inlines        = buildContext.ElementBuilder.BuildElements(contentContext, elementMetadata.Inlines);

            if (inlines != null)
            {
                foreach (var inline in inlines)
                {
                    element.Inlines.Add(inline);
                }
            }

            BuildHelper.PostApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.PostApplyTextProperties(element, elementMetadata);

            return(element);
        }
Ejemplo n.º 3
0
        private Stream CreateBarcodeImageStream(PrintElementBuildContext buildContext, dynamic elementMetadata, PrintElementSize imageSize)
        {
            string textSting = BuildHelper.FormatValue(buildContext, elementMetadata.Text, elementMetadata.SourceFormat);

            textSting = PrepareText(textSting);

            if (textSting != null)
            {
                bool showText;
                showText = !ConvertHelper.TryToBool(elementMetadata.ShowText, out showText) || showText;

                // Для генерации штрих-кода используется функциональность FastReport

                try
                {
                    var barcode = new BarcodeObject
                    {
                        Barcode  = CreateBarcode(elementMetadata),
                        ShowText = showText,
                        Text     = textSting,
                        Height   = 64
                    };

                    // Для получения размеров штрих-кода рисуем его первый раз
                    using (var codeBmp = new Bitmap(1, 1))
                        using (var graphics = Graphics.FromImage(codeBmp))
                            using (var graphicCache = new GraphicCache())
                            {
                                barcode.Draw(new FRPaintEventArgs(graphics, 1, 1, graphicCache));
                            }

                    // Теперь, зная размеры штрих-кода, рисуем его второй раз
                    if (barcode.Width > 0 && barcode.Height > 0)
                    {
                        using (var codeBmp = new Bitmap((int)barcode.Width, (int)barcode.Height))
                            using (var graphics = Graphics.FromImage(codeBmp))
                                using (var graphicCache = new GraphicCache())
                                {
                                    graphics.Clear(Color.White);
                                    barcode.Draw(new FRPaintEventArgs(graphics, 1, 1, graphicCache));

                                    imageSize.Width  = codeBmp.Width;
                                    imageSize.Height = codeBmp.Height;

                                    var codeStream = new MemoryStream();
                                    codeBmp.Save(codeStream, ImageFormat.Png);
                                    codeStream.Seek(0, SeekOrigin.Begin);

                                    return(codeStream);
                                }
                    }
                }
                catch
                {
                }
            }

            return(null);
        }
        private static void CreateTableColumns(PrintElementBuildContext buildContext, PrintElementTable table, dynamic columns)
        {
            if (columns != null)
            {
                var autoWidthAvailable = BuildHelper.CalcContentWidth(buildContext.ElementWidth, table.Margin, table.Padding, table.Border.Thickness);
                var autoWidthColumns   = 0;

                // Генерация столбцов
                foreach (var column in columns)
                {
                    var tableColumn = new PrintElementTableColumn();

                    double sizeInPixels;

                    // Если указан абсолютный размер
                    if (BuildHelper.TryToSizeInPixels(column.Size, column.SizeUnit, out sizeInPixels))
                    {
                        // Если размер не превышает доступный остаток
                        if (autoWidthAvailable > sizeInPixels)
                        {
                            autoWidthAvailable -= sizeInPixels;
                        }
                        else
                        {
                            sizeInPixels = autoWidthAvailable;

                            autoWidthAvailable = 0;
                        }

                        tableColumn.Size = sizeInPixels;
                    }
                    // Если размер не указан, он высчитывается автоматически
                    else
                    {
                        ++autoWidthColumns;

                        tableColumn.Size = null;
                    }

                    table.Columns.Add(tableColumn);

                    buildContext.MapElement(tableColumn, column);
                }

                if (autoWidthColumns > 0)
                {
                    var autoWidth = Math.Max(autoWidthAvailable, 0) / autoWidthColumns;

                    foreach (var tableColumn in table.Columns)
                    {
                        if (tableColumn.Size == null)
                        {
                            tableColumn.Size = autoWidth;
                        }
                    }
                }
            }
        }
Ejemplo n.º 5
0
 private static PrintElementImage CreateImage(PrintElementBuildContext buildContext, dynamic elementMetadata)
 {
     var imageStream = GetImageDataStream(buildContext, elementMetadata.Data);
     if (imageStream != null)
     {
         return ApplyImageData(imageStream, elementMetadata);
     }
     return null;
 }
Ejemplo n.º 6
0
        public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata)
        {
            var element = new PrintElementPageBreak();

            BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyTextProperties(element, elementMetadata);

            BuildHelper.ApplyBlockProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyBlockProperties(element, elementMetadata);

            return(element);
        }
Ejemplo n.º 7
0
        public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata)
        {
            PrintElementImage element = CreateBarcodeImage(buildContext, elementMetadata);

            BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyTextProperties(element, elementMetadata);

            BuildHelper.ApplyInlineProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyInlineProperties(element, elementMetadata);

            return(element);
        }
Ejemplo n.º 8
0
        public PrintViewDocument Create(object printView, object printViewSource, PrintElementMetadataMap elementMetadataMap = null)
        {
            var buildContext = new PrintElementBuildContext
            {
                IsDesignMode       = false,
                PrintViewSource    = printViewSource,
                ElementBuilder     = ElementBuilder,
                ElementMetadataMap = elementMetadataMap
            };

            var document = ElementBuilder.BuildElement(buildContext, printView, "PrintView") as PrintViewDocument;

            return(document);
        }
        private static void ApplyReference(PrintElementHyperlink element, PrintElementBuildContext buildContext, dynamic elementMetadata)
        {
            string referenceSting = BuildHelper.FormatValue(buildContext, elementMetadata.Reference, elementMetadata.SourceFormat);

            if (!string.IsNullOrEmpty(referenceSting))
            {
                Uri referenceUri;

                if (Uri.TryCreate(referenceSting, UriKind.RelativeOrAbsolute, out referenceUri))
                {
                    element.Reference = referenceUri;
                }
            }
        }
        private static void CreateStaticTableRows(PrintElementBuildContext buildContext, PrintElementTable table, dynamic rows)
        {
            if (rows != null)
            {
                var rowIndex     = 0;
                var columnCount  = table.Columns.Count;
                var skippedCells = new List <int>();

                foreach (var rowMetadata in rows)
                {
                    var tableRow = new PrintElementTableRow();

                    if (rowMetadata != null)
                    {
                        var rowStyle = buildContext.FindStyle(rowMetadata.Style);

                        // Установка общих свойств для текста
                        BuildHelper.ApplyTextProperties(tableRow, rowStyle);
                        BuildHelper.ApplyTextProperties(tableRow, rowMetadata);

                        for (var columnIndex = 0; columnIndex < columnCount; ++columnIndex)
                        {
                            var cellOffset = GetCellOffset(columnCount, rowIndex, columnIndex);

                            // Если ячейку не нужно отображать (из-за настроек RowSpan или ColumnSpan)
                            if (!skippedCells.Contains(cellOffset))
                            {
                                var cellMetadata = (rowMetadata.Cells != null) ? Enumerable.ElementAtOrDefault(rowMetadata.Cells, columnIndex) : null;
                                var tableCell    = CreateTableCell(buildContext, table, columnIndex, cellMetadata, true);
                                tableRow.Cells.Add(tableCell);

                                AddSkippedCells(skippedCells, columnCount, rowIndex, columnIndex, cellMetadata);
                            }
                        }

                        // Пост-установка общих свойств для текста
                        BuildHelper.PostApplyTextProperties(tableRow, rowStyle);
                        BuildHelper.PostApplyTextProperties(tableRow, rowMetadata);
                    }

                    buildContext.MapElement(tableRow, rowMetadata);

                    table.Rows.Add(tableRow);

                    ++rowIndex;
                }
            }
        }
        public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata)
        {
            var element = new PrintElementRun();

            BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyTextProperties(element, elementMetadata);

            BuildHelper.ApplyInlineProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyInlineProperties(element, elementMetadata);

            ApplyText(element, buildContext, elementMetadata);

            BuildHelper.PostApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.PostApplyTextProperties(element, elementMetadata);

            return(element);
        }
Ejemplo n.º 12
0
        private static void ApplyPrintViewStyles(PrintElementBuildContext buildContext, dynamic styles)
        {
            if (styles != null)
            {
                var printViewStyles = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase);

                foreach (var style in styles)
                {
                    string name;

                    if (ConvertHelper.TryToNormString(style.Name, out name))
                    {
                        printViewStyles[name] = style;
                    }
                }

                buildContext.PrintViewStyles = printViewStyles;
            }
        }
Ejemplo n.º 13
0
        private PrintElementImage CreateBarcodeImage(PrintElementBuildContext buildContext, dynamic elementMetadata)
        {
            var imageSize   = new PrintElementSize();
            var imageStream = CreateBarcodeImageStream(buildContext, elementMetadata, imageSize);

            try
            {
                imageStream = ApplyRotation(imageStream, elementMetadata.Rotation, imageSize);
                return(new PrintElementImage(imageStream)
                {
                    Size = imageSize
                });
            }
            catch
            {
            }

            return(null);
        }
        public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata)
        {
            var element = new PrintElementLine
            {
                Border = new PrintElementBorder
                {
                    Thickness = new PrintElementThickness(0, 0, 0, 1),
                    Color     = "Black"
                }
            };

            BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyTextProperties(element, elementMetadata);

            BuildHelper.ApplyBlockProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyBlockProperties(element, elementMetadata);

            return(element);
        }
Ejemplo n.º 15
0
        public static string FormatValue(PrintElementBuildContext buildContext, dynamic text, dynamic format)
        {
            string result;

            // Если текст не задан, значение берется из источника
            if (!ConvertHelper.TryToString(text, out result))
            {
                var sourceValue = buildContext.ElementSourceValue;

                if (sourceValue != null)
                {
                    // Определение функции для форматирования значения

                    Func <object, string> formatFunc = buildContext.ElementBuilder.BuildElement(buildContext, format);

                    if (formatFunc == null)
                    {
                        formatFunc = v => v.ToString();
                    }

                    // Форматирование значения (или значений для коллекции)
                    result = ConvertHelper.ObjectIsCollection(sourceValue)
                        ? string.Join("; ", ((IEnumerable)sourceValue).Cast <object>().Select(formatFunc))
                        : formatFunc(sourceValue);
                }
                else if (buildContext.IsDesignMode)
                {
                    // В режиме дизайна отображается наименование свойства источника данных или выражение

                    if (!string.IsNullOrEmpty(buildContext.ElementSourceProperty))
                    {
                        result = string.Format("[{0}]", buildContext.ElementSourceProperty);
                    }
                    else if (!string.IsNullOrEmpty(buildContext.ElementSourceExpression))
                    {
                        result = string.Format("[{0}]", buildContext.ElementSourceExpression);
                    }
                }
            }

            return(result);
        }
        private static PrintElementTableRow CreateHeaderTableRow(PrintElementBuildContext buildContext, PrintElementTable table, dynamic columns)
        {
            var tableRow = new PrintElementTableRow();

            if (columns != null)
            {
                var columnIndex = 0;

                foreach (var column in columns)
                {
                    var cellMetadata = column.Header;
                    var tableCell    = CreateTableCell(buildContext, table, columnIndex, cellMetadata, false);
                    tableRow.Cells.Add(tableCell);

                    ++columnIndex;
                }
            }

            return(tableRow);
        }
Ejemplo n.º 17
0
        public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata)
        {
            var element = new PrintViewDocument
            {
                Font = new PrintElementFont {
                    Family = BuildHelper.DefautlFontFamily
                }
            };

            // Установка стилей печатного представления
            ApplyPrintViewStyles(buildContext, elementMetadata.Styles);

            // Установка общих свойств печатного представления
            BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyTextProperties(element, elementMetadata);

            // Настройка размеров страницы печатного представления
            ApplyPageSize(element, elementMetadata.PageSize);
            ApplyPagePadding(element, elementMetadata.PagePadding);

            // Настройка размеров колонки печатного представления
            var contentWidth = CalcContentWidth(element);

            // Генерация содержимого печатного представления

            var contentContext = buildContext.Create(contentWidth);
            var blocks         = buildContext.ElementBuilder.BuildElements(contentContext, elementMetadata.Blocks);

            if (blocks != null)
            {
                foreach (var block in blocks)
                {
                    element.Blocks.Add(block);
                }
            }

            BuildHelper.PostApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.PostApplyTextProperties(element, elementMetadata);

            return(element);
        }
        private static PrintElementTableRow CreateDynamicTableRow(PrintElementBuildContext buildContext, PrintElementTable table, dynamic columns, object rowSource)
        {
            var tableRow = new PrintElementTableRow();

            if (columns != null)
            {
                var rowContext = buildContext.Create(buildContext.ElementWidth);
                rowContext.ElementSourceValue = rowSource;

                var columnIndex = 0;

                foreach (var column in columns)
                {
                    var cellMetadata = column.CellTemplate;
                    var tableCell    = CreateTableCell(rowContext, table, columnIndex, cellMetadata, false);
                    tableRow.Cells.Add(tableCell);

                    ++columnIndex;
                }
            }

            return(tableRow);
        }
Ejemplo n.º 19
0
        private static Stream GetImageDataStream(PrintElementBuildContext buildContext, dynamic imageData)
        {
            Stream result = null;

            byte[] imageDataBytes;

            // Если данные не заданы, они берутся из источника
            if (!ConvertHelper.TryToBytes(imageData, out imageDataBytes) || imageDataBytes == null)
            {
                if (!ConvertHelper.TryToBytes(buildContext.ElementSourceValue, out imageDataBytes) || imageDataBytes == null)
                {
                    if (buildContext.IsDesignMode)
                    {
                        // В режиме дизайна отображается наименование свойства источника данных или выражение

                        if (!string.IsNullOrEmpty(buildContext.ElementSourceProperty))
                        {
                            result = GetImageDataStreamStub(string.Format("[{0}]", buildContext.ElementSourceProperty));
                        }
                        else if (!string.IsNullOrEmpty(buildContext.ElementSourceExpression))
                        {
                            result = GetImageDataStreamStub(string.Format("[{0}]", buildContext.ElementSourceExpression));
                        }
                    }
                }
                else
                {
                    result = new MemoryStream(imageDataBytes);
                }
            }
            else
            {
                result = new MemoryStream(imageDataBytes);
            }

            return result;
        }
Ejemplo n.º 20
0
 public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata)
 {
     return(FormatFunc(elementMetadata.Format));
 }
Ejemplo n.º 21
0
        private static PrintElementBuildContext CreateContentContext(PrintElementParagraph element, PrintElementBuildContext buildContext)
        {
            var contentWidth = (element.Border != null)
                        ? BuildHelper.CalcContentWidth(buildContext.ElementWidth, element.Margin, element.Padding, element.Border.Thickness)
                        : BuildHelper.CalcContentWidth(buildContext.ElementWidth, element.Margin, element.Padding);

            return(buildContext.Create(contentWidth));
        }
 private static void ApplyText(PrintElementRun element, PrintElementBuildContext buildContext, dynamic elementMetadata)
 {
     element.Text = BuildHelper.FormatValue(buildContext, elementMetadata.Text, elementMetadata.SourceFormat);
 }
Ejemplo n.º 23
0
        private static PrintElementBuildContext CreateItemContext(PrintElementList element, PrintElementBuildContext buildContext)
        {
            var contentWidth = (element.Border != null)
                ? BuildHelper.CalcContentWidth(buildContext.ElementWidth, element.Margin, element.Padding, element.Border.Thickness, new PrintElementThickness(element.MarkerOffsetSize))
                : BuildHelper.CalcContentWidth(buildContext.ElementWidth, element.Margin, element.Padding, new PrintElementThickness(element.MarkerOffsetSize));

            return(buildContext.Create(contentWidth));
        }
        private static PrintElementTableCell CreateTableCell(PrintElementBuildContext buildContext, PrintElementTable table, int columnIndex, dynamic cellMetadata, bool applySpan)
        {
            var tableCell = new PrintElementTableCell
            {
                ColumnSpan = 1,
                RowSpan    = 1,
                Border     = new PrintElementBorder
                {
                    Thickness = new PrintElementThickness(0, 0, 1, 1),
                    Color     = PrintElementColors.Black
                },
                Padding = BuildHelper.DefaultPadding
            };

            if (cellMetadata != null)
            {
                var cellStyle = buildContext.FindStyle(cellMetadata.Style);

                // Установка общих свойств для текста
                BuildHelper.ApplyTextProperties(tableCell, cellStyle);
                BuildHelper.ApplyTextProperties(tableCell, cellMetadata);

                // Установка общих свойств ячейки таблицы
                BuildHelper.ApplyTableCellProperties(tableCell, cellStyle);
                BuildHelper.ApplyTableCellProperties(tableCell, cellMetadata);

                // Объединение ячеек по горизонтали и вертикали
                if (applySpan)
                {
                    tableCell.ColumnSpan = GetCellSpan(cellMetadata.ColumnSpan);
                    tableCell.RowSpan    = GetCellSpan(cellMetadata.RowSpan);
                }

                // Вычисление ширины ячейки для размещения содержимого

                var cellWidth = 0.0;

                for (var i = columnIndex; (i < columnIndex + tableCell.ColumnSpan) && (i < table.Columns.Count); ++i)
                {
                    cellWidth += table.Columns[i].Size.Value;
                }

                cellWidth = BuildHelper.CalcContentWidth(cellWidth, tableCell.Padding, tableCell.Border.Thickness);

                // Создание содержимого и помещение его в ячейку

                var cellContext = buildContext.Create(cellWidth);
                var cellContent = buildContext.ElementBuilder.BuildElement(cellContext, cellMetadata.Block);

                if (cellContent is PrintElementBlock)
                {
                    tableCell.Block = cellContent;
                }

                // Пост-установка общих свойств для текста
                BuildHelper.PostApplyTextProperties(tableCell, cellStyle);
                BuildHelper.PostApplyTextProperties(tableCell, cellMetadata);
            }

            buildContext.MapElement(tableCell, cellMetadata);

            return(tableCell);
        }
        public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata)
        {
            var element = new PrintElementTable
            {
                Border = new PrintElementBorder
                {
                    Thickness = new PrintElementThickness(1, 1, 0, 0),
                    Color     = PrintElementColors.Black
                },
                Margin  = BuildHelper.DefaultMargin,
                Padding = BuildHelper.DefaultPadding,
            };

            BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyTextProperties(element, elementMetadata);

            BuildHelper.ApplyBlockProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyBlockProperties(element, elementMetadata);

            // Генерация стобцов таблицы

            CreateTableColumns(buildContext, element, elementMetadata.Columns);

            // Генерация заголовка таблицы

            bool showHeader;

            if (!ConvertHelper.TryToBool(elementMetadata.ShowHeader, out showHeader) || showHeader)
            {
                var tableRow = CreateHeaderTableRow(buildContext, element, elementMetadata.Columns);
                element.Rows.Add(tableRow);
            }

            // Генерация явно объявленных строк таблицы

            CreateStaticTableRows(buildContext, element, elementMetadata.Rows);

            // Генерация строк таблицы по данным источника

            var tableSource = buildContext.ElementSourceValue;

            if (ConvertHelper.ObjectIsCollection(tableSource))
            {
                if (HasCellTemplate(elementMetadata.Columns))
                {
                    foreach (var rowSource in (IEnumerable)tableSource)
                    {
                        var tableRow = CreateDynamicTableRow(buildContext, element, elementMetadata.Columns, rowSource);
                        element.Rows.Add(tableRow);
                    }
                }
            }
            else if (buildContext.IsDesignMode)
            {
                // Отображение шаблона строки в дизайнере

                if (HasCellTemplate(elementMetadata.Columns))
                {
                    var tableRow = CreateDynamicTableRow(buildContext, element, elementMetadata.Columns, null);
                    element.Rows.Add(tableRow);
                }
            }

            BuildHelper.PostApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.PostApplyTextProperties(element, elementMetadata);

            return(element);
        }
Ejemplo n.º 26
0
        public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata)
        {
            var element = new PrintElementList
            {
                Margin      = BuildHelper.DefaultMargin,
                Padding     = BuildHelper.DefaultPadding,
                MarkerStyle = PrintElementListMarkerStyle.None
            };

            BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyTextProperties(element, elementMetadata);

            BuildHelper.ApplyBlockProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyBlockProperties(element, elementMetadata);

            ApplyStartIndex(element, elementMetadata.StartIndex);
            ApplyMarkerStyle(element, elementMetadata.MarkerStyle);
            MarkerOffsetStyle(element, elementMetadata.MarkerOffsetSize, elementMetadata.MarkerOffsetSizeUnit);

            var itemContext = CreateItemContext(element, buildContext);

            // Генерация явно объявленных элементов списка

            var staticItems = buildContext.ElementBuilder.BuildElements(itemContext, elementMetadata.Items);

            if (staticItems != null)
            {
                foreach (var staticItem in staticItems)
                {
                    var listItem = new PrintElementSection();
                    listItem.Blocks.Add(staticItem);
                    element.Items.Add(listItem);
                }
            }

            // Генерация элементов списка по данным источника

            var listItemTemplate = elementMetadata.ItemTemplate;
            var listSource       = buildContext.ElementSourceValue;

            if (listItemTemplate != null)
            {
                if (ConvertHelper.ObjectIsCollection(listSource))
                {
                    foreach (var itemSource in (IEnumerable)listSource)
                    {
                        itemContext.ElementSourceValue = itemSource;

                        var dynamicItem = buildContext.ElementBuilder.BuildElement(itemContext, listItemTemplate);

                        if (dynamicItem is PrintElementBlock)
                        {
                            var listItem = new PrintElementSection();
                            listItem.Blocks.Add(dynamicItem);
                            element.Items.Add(listItem);
                        }
                    }
                }
                else if (buildContext.IsDesignMode)
                {
                    // Отображение шаблона элемента в дизайнере

                    itemContext.ElementSourceValue = null;

                    var dynamicItem = buildContext.ElementBuilder.BuildElement(itemContext, listItemTemplate);

                    if (dynamicItem is PrintElementBlock)
                    {
                        var listItem = new PrintElementSection();
                        listItem.Blocks.Add(dynamicItem);
                        element.Items.Add(listItem);
                    }
                }
            }

            BuildHelper.PostApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.PostApplyTextProperties(element, elementMetadata);

            return(element);
        }