2017-04-03 7 views
1

XAML/XAML.csのタブアイテム全体またはその一部を有効にするにはどうすればよいですか?タブ項目の印刷

私は以下のコードを使用しており、タブアイテムを印刷することができますが、サイズとプレビューを制御したいと考えています。ランドスケープ・ページ・フォーマットを使用すると、それでも完全なページは印刷されず、その一部が切り捨てられます。

TabItem Header = "Stars"

XAML

<Button Margin=" 5,5,5,5" Grid.Row="3" x:Name="PrintOilTab" 
     Click="PrintOilTab_Click" Content="Print" FontSize="10"/> 

XAML.CS

private void PrintOilTab_Click(object sender, RoutedEventArgs e) 
{ 
    System.Windows.Controls.PrintDialog Printdlg = 
     new System.Windows.Controls.PrintDialog(); 

    if ((bool)Printdlg.ShowDialog().GetValueOrDefault()) 
    { 
     CompleteOilLimitDiagram.Measure(
      new Size(Printdlg.PrintableAreaWidth,    
        Printdlg.PrintableAreaHeight)); 
     Printdlg.PrintVisual(CompleteOilLimitDiagram, "Stars"); 
    } 
} 

答えて

1

私はPrintVisual()と幸運を持っていたことがありません。私はいつもFixedDocumentを生成してからPrintDocument()を使用しなければなりませんでした。

このコードはImageSourceを印刷するように設計されていますが、私は簡単にFixedDocumentにコントロールを追加することにより、任意のコントロールを印刷するように適合させることができると考えている。

using System.Windows.Documents; 

    public async void SendToPrinter() 
    { 
     if (ImageSource == null || Image == null) 
      return; 

     var printDialog = new PrintDialog(); 

     bool? result = printDialog.ShowDialog(); 
     if (!result.Value) 
      return; 

     FixedDocument doc = GenerateFixedDocument(ImageSource, printDialog); 
     printDialog.PrintDocument(doc.DocumentPaginator, ""); 

    } 

    private FixedDocument GenerateFixedDocument(ImageSource imageSource, PrintDialog dialog) 
    { 
     var fixedPage = new FixedPage(); 
     var pageContent = new PageContent(); 
     var document = new FixedDocument(); 

     bool landscape = imageSource.Width > imageSource.Height; 

     if (landscape) 
     { 
      fixedPage.Height = dialog.PrintableAreaWidth; 
      fixedPage.Width = dialog.PrintableAreaHeight; 
      dialog.PrintTicket.PageOrientation = PageOrientation.Landscape; 
     } 
     else 
     { 
      fixedPage.Height = dialog.PrintableAreaHeight; 
      fixedPage.Width = dialog.PrintableAreaWidth; 
      dialog.PrintTicket.PageOrientation = PageOrientation.Portrait; 
     } 

     var imageControl = new System.Windows.Controls.Image {Source = ImageSource,}; 
     imageControl.Width = fixedPage.Width; 
     imageControl.Height = fixedPage.Height; 

     pageContent.Width = fixedPage.Width; 
     pageContent.Height = fixedPage.Height; 

     document.Pages.Add(pageContent); 
     pageContent.Child = fixedPage; 

     // You'd have to do something different here: possibly just add your 
     // tab to the fixedPage.Children collection instead. 
     fixedPage.Children.Add(imageControl); 

     return document; 
    } 
関連する問題