Есть ли опция для flowdocument, которая позволяет запретить разбиение блоков на 2 страницы при печати? - PullRequest
2 голосов
/ 16 декабря 2011

Я пытаюсь сделать небольшой принтер этикеток с c # 2010, используя потоковый документ из wpf.

Я создаю этикетки следующим образом:

FlowDocument doc = new FlowDocument();
Paragraph p = new Paragraph();
foreach (Labels label in labels)
        {

            p.Inlines.Add(label.name+"\n");
            p.Inlines.Add(label.age + "\n");
            p.Inlines.Add(label.price + "\n");
            p.Inlines.Add( "\n");
            doc.Blocks.Add(p);
        }

Это работает нормально, нокогда генерируется больше меток, чем помещается на одной странице, метки разделяются.Так, например, это имя на Page1, а возраст, цена на Page2.

Теперь я попросил вас предотвратить возможность разделения этикеток.

1 Ответ

6 голосов
/ 17 декабря 2011

Да. Вы можете указать, что «Абзац» не следует разбивать на страницы или столбцы, задав для его свойства «KeepTogether» значение True (по умолчанию установлено значение False). Единственное предупреждение: если на одной странице недостаточно места для абзаца, то свойство KeepTogether будет игнорироваться для отображения содержимого. Чтобы это работало в вашем примере, каждый ярлык должен иметь свой собственный абзац, например:

FlowDocument doc = new FlowDocument();
foreach (Labels label in labels)
{
    Paragraph p = new Paragraph();
    p.KeepTogether = true;
    p.Inlines.Add(label.name + "\n");
    p.Inlines.Add(label.age + "\n");
    p.Inlines.Add(label.price + "\n");
    doc.Blocks.Add(p);
}

Последняя добавленная вами новая строка больше не нужна, поскольку между абзацами, естественно, есть пробел. Вы даже можете удалить последний символ новой строки в строке 'price'.

...