2013-07-01 51 views
2

我如何将下面的代码引用到c#中进行打印。我使用了资源字典,因为我不想在打印时显示窗口,而是直接从按钮打印。如何引用资源?

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

<DockPanel Name="dockpanel" Width="auto" LastChildFill="True" x:Key="Maindock"> 
     <Grid DockPanel.Dock="top" Width="340" > 
</DockPanel> 

这里是打印代码:

//System.Printing 
//get selected printer capabilities 
System.Printing.PrintCapabilities capabilities =     
       printDlg.PrintQueue.GetPrintCapabilities(printDlg.PrintTicket); 

//get the size of the printer page 
Size sz = new Size(capabilities.PageImageableArea.ExtentWidth, 
        capabilities.PageImageableArea.ExtentHeight); 

// update the layout of the visual to the printer page size. 
Print.Measure(sz); 
Print.Arrange(new Rect(new Point(capabilities.PageImageableArea.OriginWidth, 
       capabilities.PageImageableArea.OriginHeight), sz)); 

//now print the visual to printer to fit on the one page. 
//printDlg.PageRangeSelection(printQty); 
//now print the visual to printer to fit on the one page. 
String printerName = "Brother DCP-7045N Printer"; 

System.Printing.PrintQueue queue = new System.Printing.LocalPrintServer() 
               .GetPrintQueueprinterName); 
printDlg.PrintQueue = queue; 

printDlg.PrintVisual(Print, ""); 
+0

我很困惑。你想打印什么? –

+0

停靠面板。 – user2122032

+0

代码本身或呈现的控件? –

回答

1

如果要打印资源的应用程序资源的一部分,即加入的App.xaml文件直接,如下图所示,或通过合并字典,那么你应该能够新增一个视觉元素并设置内容。这里我使用this.FindResource()来获取资源的一个实例来设置内容。

注意:您不必显示新的页面以打印它。

应用资源

<Application x:Class="PrintTest.App" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <Grid x:Key="PrintTestResource"> 
      <TextBlock FontSize="50" HorizontalAlignment="Center" VerticalAlignment="Center">Hello World</TextBlock> 
     </Grid> 
    </Application.Resources> 
</Application> 

打码

public void Print() 
{ 
    var printDialog = new PrintDialog(); 
    if (printDialog.ShowDialog().Value) 
    { 
     var printCapabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket); 
     var printSize = new Size(printCapabilities.PageImageableArea.ExtentWidth, printCapabilities.PageImageableArea.ExtentHeight); 

     var printPage = new Page(); 
     printPage.Content = this.FindResource("PrintTestResource"); 
     printPage.Measure(printSize); 
     printPage.Arrange(new Rect(new Point(printCapabilities.PageImageableArea.OriginWidth, printCapabilities.PageImageableArea.OriginHeight), printSize)); 

     printDialog.PrintVisual(printPage, String.Empty); 
    } 
}