Мы приложение структурировано примерно так:Печать в Silverlight 4
<Grid x:Name="LayoutRoot">
<ScrollViewer>
<Canvas x:Name="canvas">
<StackPanel> < Button /><Slider /><Button /></StackPanel>
<custom:Blob />
<custom:Blob />
<custom:Blob />
</Canvas>
</ScrollViewer>
</Grid>
Каждый Blob состоит из 1 или более прямоугольников, линий и текстовых полей; они расположены в любом месте на холсте.
Если я распечатать документ с помощью LayoutRoot:
PrintDocument pd = new PrintDocument();
pd += (s, pe) => { pe.PageVisual = LayoutRoot; };
pd.Print("Blobs");
... это как печать экрана - полосы прокрутки, ползунки, блобов, которые видны - печатаются.
Если я установил PageVisual = холст, ничего не печатается.
Как я могу получить все объекты blob и только те объекты, которые нужно распечатать? Нужно ли копировать их в другой контейнер и предоставить этот контейнер в PageVisual? Могу ли я использовать ViewBox, чтобы убедиться, что они все подходят на одной странице?
Спасибо за любые советы ....
Полезно, спасибо. Вероятно, есть способ указать область (прямоугольник) холста для печати ...? Или аналогично, в событии StartPrint, измените размер Canvas на минимальный ограничивающий прямоугольник для всех объектов, а затем восстановите его размер в событии EndPrint. Наконец, может ли ViewBox преобразовать холст, чтобы он помещался на одной странице? – Number8
Я не уверен, у меня не было шанса попробовать это, но он должен что-то сделать, когда вы укажете, что у вас более 1 страницы, и содержимое не подходит. Но если это действительно ничего не значит, вам может понадобиться масштабировать холст группировки перед печатью, а затем позже масштабировать его, когда печать будет завершена. – texmex5