Silverlight имеет очень простой в использовании API печати. Я недавно использовал его и узнал, как это сделать, используя учебник Melodatron, указанный в списке, и этот на сайте Visiblox . Это специфично для их библиотеки графиков, но я все же нашел ее очень полезной.
Я предполагаю, что у вас есть только 1 изображение для печати здесь, дайте мне знать, если у вас есть еще. Во-первых, вам нужно настроить сетку или что-то подобное, чтобы поместить ваши фотографии. Вам понадобится N строк в этой сетке. Вы должны будете сделать это в коде, поскольку у вас есть определенное количество строк, которые вы хотите создать, но это может быть легко достигнуто чем-то вроде этого:
Grid grid = new Grid();
// Set the column and row definitions
for (int i = 0; i < Number of rows; i++)
{
grid.RowDefinitions.Add(new RowDefinition());
}
Это должно настроить вашу сетку, которая вам нужна. После того, как у вас есть сетка, вам нужно заполнить ее имеющимися изображениями. Это довольно просто, единственная проблема будет в том, что ваше изображение не может быть использовано несколько раз - то есть уже имеющееся изображение может появиться в сетке только один раз. Вам придется дублировать его, чтобы разместить его на сетке несколько раз. Я не уверен, как вы создаете свои изображения, но вы могли бы создать новое изображение на основе исходного пути существующего изображения? Есть нить о том, как это сделать здесь . Вам нужно будет предоставить более подробную информацию, если вам нужна помощь в этом.
// Set the column and row definitions
for (int i = 0; i < Number of rows; i++)
{
// Duplicate your existing image here.
Image image = new Image();
grid.Children.Add(image);
Grid.SetRow(image, i);
}
Весь код выше должен быть в этом методе:
private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
//Code from above...
e.PageVisual = grid;
}
В обработчике события кнопки, в котором вы хотите распечатать, сделайте следующее:
private void Button_Click(object sender, RoutedEventArgs e)
{
PrintDocument printDocument = new PrintDocument();
printDocument.PrintPage += new EventHandler<PrintPageEventArgs>(printDocument_PrintPage);
printDocument.Print("TITLE");
}
Надеюсь, это поможет!