Beispiel #1
0
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var viewModel = new PrintableUserControlViewModel(int.Parse(((ComboBoxItem)NumberOfLabelsToPrint.SelectedValue).Content.ToString()), (bool)FitToPage.IsChecked, (bool)NeedToShowDialog.IsChecked);

            for (int labelIndex = 0; labelIndex < viewModel.NumberOfLabelsToPrint; ++labelIndex)
            {
                viewModel.LabelViewModels[labelIndex].Text1 = string.Format("test{0}.1", labelIndex + 1);
                viewModel.LabelViewModels[labelIndex].Text2 = string.Format("test{0}.2", labelIndex + 1);
                viewModel.LabelViewModels[labelIndex].Text3 = string.Format("test{0}.3", labelIndex + 1);
            }

            var view = new PrintableUserControl(viewModel);

            PrintDialog printDialog = new PrintDialog();

            bool printDialogResult = true;

            if (viewModel.NeedToShowDialog)
            {
                printDialogResult = printDialog.ShowDialog() ?? false;
            }
            else
            {
                printDialog.PrintQueue                  = LocalPrintServer.GetDefaultPrintQueue(); // can also select one of new PrintServer().GetPrintQueues();
                printDialog.PrintTicket.CopyCount       = 1;                                       // number of copies
                printDialog.PrintTicket.PageOrientation = PageOrientation.Portrait;
            }

            if (viewModel.FitToPage)
            {
                //get selected printer capabilities
                System.Printing.PrintCapabilities capabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket);

                //get scale of the printer to that of WPF control
                double scale = Math.Min(capabilities.PageImageableArea.ExtentWidth / view.ActualWidth, capabilities.PageImageableArea.ExtentHeight /
                                        view.ActualHeight);

                //Scare the control for printing size
                view.LayoutTransform = new ScaleTransform(scale, scale);

                Size sizeOfPrinterPage = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight);

                //Update the layout of the control to the size of the printer page
                view.Measure(sizeOfPrinterPage);
                view.Arrange(new Rect(new Point(capabilities.PageImageableArea.OriginWidth, capabilities.PageImageableArea.OriginHeight), sizeOfPrinterPage));
            }

            //print the control to printer
            printDialog.PrintVisual(view, "Print title");
        }
Beispiel #2
0
        public PrintableUserControl(PrintableUserControlViewModel printableUserControlViewModel)
        {
            DataContext = printableUserControlViewModel;

            InitializeComponent();
        }