2015-03-09 6 views
0

Учитывая действительный экземпляр (System.Windows.Controls.) PrintDialog, какой самый простой способ просто выплюнуть пустую страницу из принтера? У меня есть случай, когда я могу успешно распечатать страницу (на самом деле Grid), заполненную материалом для печати, но если я установил все UIElement.Visibility = Visibility.Hidden;, я вижу, что результирующий документ потребляется очередью печати, но нет подтверждения получения от принтер, его экран или любое механическое движение.Как распечатать пустую страницу?

Edit: Код печати:

MyPageToPrint myPtP = new MyPageToPrint(); 

foreach (UIElement elt in myPtP.MainGrid.Children) 
{ 
    elt.Visibility = Visibility.Hidden; 
} 

printDialog.PrintVisual(myPtP.MainGrid, "Print blank page"); 
myPtP.Close(); 

Это приводит к отсутствию явного подтверждения со стороны принтера, но если я манипулировать UIElement с, то он будет печатать.

+1

Пожалуйста, добавьте немного соответствующего кода. Другими словами, в частности, что вы пробовали – NotMe

+0

Добавлен пример кода @NotMe – Conrad

ответ

1

Ну, ваш вопрос немного широк, потому что, если вы имеете в виду «печатать только пустую страницу», тогда это будет означать нечто иное, чем «напечатать одну пустую страницу из многих страниц». Вероятно, лучший способ - использовать paginator и для любой страницы, которая хочет пустое, просто иметь пустой холст. Например:

class Paginator : DocumentPaginator 
{ 
    public override DocumentPage GetPage(int pageNumber) 
    { 
     if (pageNumber == 0) 
     { 
      Canvas printCanvas = new Canvas(); 
      printCanvas.Measure(PageSize); 
      return new DocumentPage(printCanvas); 
     } 
     else 
     { 
      // deal with other pages 
      throw new NotImplementedException(); 
     } 
    } 

    public override bool IsPageCountValid 
    { 
     get { return true; } 
    } 

    public override int PageCount 
    { 
     get { return 1; } 
    } 

    public override Size PageSize 
    { 
     get 
     { 
      return new Size(8.5,11); 
     } 
     set 
     { 
      throw new NotImplementedException(); 
     } 
    } 

    public override IDocumentPaginatorSource Source 
    { 
     get { return null; } 
    } 
} 

Затем в вашем печати обработчик щелчка, вы можете иметь что-то вроде этого:

private void printButton_Click(object sender, RoutedEventArgs e) 
{ 
    var dialog = new PrintDialog(); 
    if (dialog.ShowDialog() == true) 
    { 
     var paginator = new Paginator(); 
     dialog.PrintDocument(paginator, "Print demo"); 
    } 
} 

Для краткости я использовал код фоновым и клик-обработчик; рекомендуется, чтобы вы получили это в ViewModel и подключили его к представлению через команду, но это другая тема.

+0

Я надеялся, что вам не придется создавать совершенно новый '' DocumentPaginator'', но похоже, что это то, что требуется здесь. – Conrad

+0

Если у вас более одной страницы, я не вижу ее. –

Смежные вопросы