Drucken in AppsPrint from your app

Wichtige APIsImportant APIs

Hier erfahren Sie, wie Sie Dokumente in einer Universellen Windows-App drucken.Learn how to print documents from a Universal Windows app. In diesem Thema wird zudem gezeigt, wie bestimmte Seiten gedruckt werden.This topic also shows how to print specific pages. Informationen zu erweiterten Änderungen an der Benutzeroberfläche für die Druckvorschau finden Sie unter Anpassen der Benutzeroberfläche für die Druckvorschau.For more advanced changes to the print preview UI, see Customize the print preview UI.

Tipp

 Die meisten Beispiele in diesem Thema basieren auf dem Beispiel universelle Windows-Plattform (UWP) Print, das Teil des App-beispielrepository universelle Windows-Plattform (UWP) auf GitHub ist. Most of the examples in this topic are based on the Universal Windows Platform (UWP) print sample, which is part of the Universal Windows Platform (UWP) app samples repo on GitHub.

Registrieren für DruckfunktionenRegister for printing

Um Ihrer App Druckfunktionen hinzuzufügen, müssen Sie sie als Erstes für den Vertrag für "Drucken" registrieren.The first step to add printing to your app is to register for the Print contract. Ihre APP muss dies auf jedem Bildschirm ausführen, von dem aus Sie möchten, dass der Benutzer drucken kann.Your app must do this on every screen from which you want your user to be able to print. Es kann jeweils nur der Bildschirm, der gerade angezeigt wird, für das Drucken registriert werden.Only the screen that is displayed to the user can be registered for printing. Wenn ein Bildschirm Ihrer App für das Drucken registriert wurde, muss die Registrierung beim Schließen des Bildschirms aufgehoben werden.If one screen of your app has registered for printing, it must unregister for printing when it exits. Wird an seiner Stelle ein anderer Bildschirm angezeigt, muss dieser nächste Bildschirm beim Öffnen für einen neuen Vertrag für „Drucken“ registriert werden.If it is replaced by another screen, the next screen must register for a new Print contract when it opens.

Tipp

 Wenn Sie das Drucken von mehr als einer Seite in der APP unterstützen müssen, können Sie diesen Druck Code in eine gemeinsame Hilfsklasse einfügen und die APP-Seiten wieder verwenden lassen. If you need to support printing from more than one page in your app, you can put this print code in a common helper class and have your app pages reuse it. Ein entsprechendes Beispiel finden Sie in der PrintHelper-Klasse im UWP-Druckbeispiel.For an example of how to do this, see the PrintHelper class in the UWP print sample.

Geben Sie zuerst die Klassen PrintManager und PrintDocument an.First, declare the PrintManager and PrintDocument. Der PrintManager-Typ und Typen zur Unterstützung anderer Windows-Druckfunktionen befinden sich im Windows.Graphics.Printing-Namespace.The PrintManager type is in the Windows.Graphics.Printing namespace along with types to support other Windows printing functionality. Der PrintDocument-Typ und andere Typen zur Unterstützung der Vorbereitung von XAML-Inhalten für das Drucken sind im Windows.UI.Xaml.Printing-Namespace enthalten.The PrintDocument type is in the Windows.UI.Xaml.Printing namespace along with other types that support preparing XAML content for printing. Sie können das Schreiben eines eigenen Druckcodes vereinfachen, indem Sie der Seite die folgenden using- oder Imports-Anweisungen hinzufügen.You can make it easier to write your printing code by adding the following using or Imports statements to your page.

using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

Die PrintDocument-Klasse wird verwendet, um den Großteil der Interaktion zwischen der App und dem PrintManager zu behandeln. Sie macht jedoch auch verschiedene eigene Rückrufe verfügbar.The PrintDocument class is used to handle much of the interaction between the app and the PrintManager, but it exposes several callbacks of its own. Erstellen Sie während der Registrierung Instanzen der Klassen PrintManager und PrintDocument, und registrieren Sie Handler für deren Druckereignisse.During registration, create instances of PrintManager and PrintDocument and register handlers for their printing events.

Im UWP-Druckbeispiel wird die Registrierung von der RegisterForPrinting-Methode durchgeführt.In the UWP print sample, registration is performed by the RegisterForPrinting method.

public virtual void RegisterForPrinting()
{
   printDocument = new PrintDocument();
   printDocumentSource = printDocument.DocumentSource;
   printDocument.Paginate += CreatePrintPreviewPages;
   printDocument.GetPreviewPage += GetPrintPreviewPage;
   printDocument.AddPages += AddPrintPages;

   PrintManager printMan = PrintManager.GetForCurrentView();
   printMan.PrintTaskRequested += PrintTaskRequested;
}

Wenn der Benutzer zu einer Seite wechselt, die das Drucken unterstützt, initiiert er die Registrierung innerhalb der OnNavigatedTo Methode.When the user goes to a page that supports printing, it initiates the registration within the OnNavigatedTo method.

protected override void OnNavigatedTo(NavigationEventArgs e)
{
   // Initialize common helper class and register for printing
   printHelper = new PrintHelper(this);
   printHelper.RegisterForPrinting();

   // Initialize print content for this scenario
   printHelper.PreparePrintContent(new PageToPrint());

   // Tell the user how to print
   MainPage.Current.NotifyUser("Print contract registered with customization, use the Print button to print.", NotifyType.StatusMessage);
}

Im Beispiel wird die Registrierung der Ereignishandler in der-Methode aufgehoben UnregisterForPrinting .In the sample, the event handlers are unregistered in the UnregisterForPrinting method.

public virtual void UnregisterForPrinting()
{
    if (printDocument == null)
    {
        return;
    }

    printDocument.Paginate -= CreatePrintPreviewPages;
    printDocument.GetPreviewPage -= GetPrintPreviewPage;
    printDocument.AddPages -= AddPrintPages;

    PrintManager printMan = PrintManager.GetForCurrentView();
    printMan.PrintTaskRequested -= PrintTaskRequested;
}

Wenn der Benutzer eine Seite verlässt, die das Drucken unterstützt, wird die Registrierung der Ereignishandler innerhalb der Methode aufgehoben OnNavigatedFrom .When the user leaves a page that supports printing, the event handlers are unregistered within the OnNavigatedFrom method.

Hinweis

Wenn Sie über eine APP mit mehreren Seiten verfügen und den Druck nicht trennen, wird eine Ausnahme ausgelöst, wenn der Benutzer die Seite verlässt und dann wieder zurückgibt.If you have a multiple-page app and don't disconnect printing, an exception is thrown when the user leaves the page and then returns to it.

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
   if (printHelper != null)
   {
         printHelper.UnregisterForPrinting();
   }
}

Erstellen einer DruckschaltflächeCreate a print button

Fügen Sie eine Druckschaltfläche an der gewünschten Stelle auf dem App-Bildschirm hinzu.Add a print button to your app's screen where you'd like it to appear. Stellen Sie sicher, dass sie den zu druckenden Inhalt nicht verdeckt oder anderweitig stört.Make sure that it doesn't interfere with the content that you want to print.

<Button x:Name="InvokePrintingButton" Content="Print" Click="OnPrintButtonClick"/>

Als Nächstes fügen Sie einen Ereignishandler zum Behandeln des Click-Ereignisses zum Code Ihrer App hinzu.Next, add an event handler to your app's code to handle the click event. Verwenden Sie die ShowPrintUIAsync-Methode, um das Drucken über Ihre App zu starten.Use the ShowPrintUIAsync method to start printing from your app. ShowPrintUIAsync ist eine asynchrone Methode, die das entsprechende Druckfenster anzeigt.ShowPrintUIAsync is an asynchronous method that displays the appropriate printing window. Wir empfehlen zunächst den Aufruf der IsSupported-Methode, um zu prüfen, ob die App auf einem gerät ausgeführt wird, das den Druck unterstützt (und den Fall behandelt, wenn dies nicht der Fall ist).We recommend calling the IsSupported method first in order to check that the app is being run on a device that supports printing (and handle the case in which it is not). Wenn das Drucken zu diesem Zeitpunkt aus einem anderen Grund nicht ausgeführt werden kann, gibtShowPrintUIAsync eine Ausnahme aus.If printing can't be performed at that time for any other reason, ShowPrintUIAsync will throw an exception. Es wird empfohlen, die Ausnahmen abzufangen und dem Benutzer mitzuteilen, wenn der Druckvorgang nicht fortgesetzt werden kann.We recommend catching these exceptions and letting the user know when printing can't proceed.

In diesem Beispiel wird ein Druckfenster im Ereignishandler für das Klicken auf eine Schaltfläche angezeigt.In this example, a print window is displayed in the event handler for a button click. Wenn die Methode eine Ausnahme auslöst (da das Drucken zu diesem Zeitpunkt nicht möglich ist), informiert ein ContentDialog-Steuerelement den Benutzer über die Situation.If the method throws an exception (because printing can't be performed at that time), a ContentDialog control informs the user of the situation.

async private void OnPrintButtonClick(object sender, RoutedEventArgs e)
{
    if (Windows.Graphics.Printing.PrintManager.IsSupported())
    {
        try
        {
            // Show print UI
            await Windows.Graphics.Printing.PrintManager.ShowPrintUIAsync();

        }
        catch
        {
            // Printing cannot proceed at this time
            ContentDialog noPrintingDialog = new ContentDialog()
            {
                Title = "Printing error",
                Content = "\nSorry, printing can' t proceed at this time.", PrimaryButtonText = "OK"
            };
            await noPrintingDialog.ShowAsync();
        }
    }
    else
    {
        // Printing is not supported on this device
        ContentDialog noPrintingDialog = new ContentDialog()
        {
            Title = "Printing not supported",
            Content = "\nSorry, printing is not supported on this device.",PrimaryButtonText = "OK"
        };
        await noPrintingDialog.ShowAsync();
    }
}

Formatieren der App-InhalteFormat your app's content

Wenn ShowPrintUIAsync aufgerufen wird, wird das PrintTaskRequested-Ereignis ausgelöst.When ShowPrintUIAsync is called, the PrintTaskRequested event is raised. Der in diesem Schritt gezeigte PrintTaskRequested-Ereignishandler erstellt eine PrintTask-Klasse, indem er die PrintTaskRequest.CreatePrintTask-Methode aufruft und den Titel für die zu druckende Seite sowie den Namen eines PrintTaskSourceRequestedHandler -Delegaten übergibt.The PrintTaskRequested event handler shown in this step creates a PrintTask by calling the PrintTaskRequest.CreatePrintTask method and passes the title for the print page and the name of a PrintTaskSourceRequestedHandler delegate. Beachten Sie, dass PrintTaskSourceRequestedHandler in diesem Beispiel inline definiert wird.Notice that in this example, the PrintTaskSourceRequestedHandler is defined inline. PrintTaskSourceRequestedHandler stellt den formatierten Inhalt für das Drucken bereit und wird an späterer Stelle beschrieben.The PrintTaskSourceRequestedHandler provides the formatted content for printing and is described later.

In diesem Beispiel wurde außerdem ein Abschlusshandler definiert, um Fehler aufzufangen.In this example, a completion handler is also defined to catch errors. Es empfiehlt sich, Abschlussereignisse zu behandeln, da die App den Benutzer dann über aufgetretene Fehler und mögliche Lösungen informieren kann.It's a good idea to handle completion events because then your app can let the user know if an error occurred and provide possible solutions. Die App kann das Abschlussereignis auch verwenden, um nachfolgende Schritte anzugeben, die der Benutzer nach einem erfolgreichen Druckauftrag ausführen kann.Likewise, your app could use the completion event to indicate subsequent steps for the user to take after the print job is successful.

protected virtual void PrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs e)
{
   PrintTask printTask = null;
   printTask = e.Request.CreatePrintTask("C# Printing SDK Sample", sourceRequested =>
   {
         // Print Task event handler is invoked when the print job is completed.
         printTask.Completed += async (s, args) =>
         {
            // Notify the user when the print operation fails.
            if (args.Completion == PrintTaskCompletion.Failed)
            {
               await scenarioPage.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
               {
                     MainPage.Current.NotifyUser("Failed to print.", NotifyType.ErrorMessage);
               });
            }
         };

         sourceRequested.SetSource(printDocumentSource);
   });
}

Nachdem die Druckaufgabe erstellt wurde, löst der PrintManager das Paginate-Ereignis aus, um eine Sammlung zu druckender Seiten anzufordern, die auf der Druckvorschau-Benutzeroberfläche angezeigt werden.After the print task is created, the PrintManager requests a collection of print pages to show in the print preview UI by raising the Paginate event. Dies entspricht der Paginate-Methode der IPrintPreviewPageCollection-Schnittstelle.This corresponds with the Paginate method of the IPrintPreviewPageCollection interface. Der Ereignishandler, den Sie bei der Registrierung erstellt haben, wird zu diesem Zeitpunkt aufgerufen.The event handler you created during registration will be called at this time.

Wichtig

 Wenn der Benutzer die Druckeinstellungen ändert, wird der paginieren-Ereignishandler erneut aufgerufen, damit Sie den Inhalt erneut ausführen können. If the user changes print settings, the paginate event handler will be called again to allow you to reflow the content. Für die bestmögliche Benutzerfreundlichkeit wird empfohlen, die Einstellungen zu überprüfen, bevor Sie den Inhalt umbrechen und die erneute Initialisierung der auf Seiten aufgeteilten Inhalte vermeiden, wenn dies nicht erforderlich ist.For the best user experience, we recommend checking the settings before you reflow the content and avoid reinitializing the paginated content when it's not necessary.

Im Paginate-Ereignishandler (der CreatePrintPreviewPages-Methode im UWP-Druckbeispiel) erstellen Sie die Seiten, die auf der Druckvorschau-Benutzeroberfläche angezeigt und an den Drucker gesendet werden.In the Paginate event handler (the CreatePrintPreviewPages method in the UWP print sample), create the pages to show in the print preview UI and to send to the printer. Der Code zum Vorbereiten der App-Inhalte für den Druck muss speziell an Ihre App und die gedruckten Inhalte angepasst werden.The code you use to prepare your app's content for printing is specific to your app and the content you print. Im Quellcode für das UWP-Druckbeispiel können Sie sehen, wie der Inhalt für das Drucken formatiert wird.Refer to the UWP print sample source code to see how it formats its content for printing.

protected virtual void CreatePrintPreviewPages(object sender, PaginateEventArgs e)
{
   // Clear the cache of preview pages
   printPreviewPages.Clear();

   // Clear the print canvas of preview pages
   PrintCanvas.Children.Clear();

   // This variable keeps track of the last RichTextBlockOverflow element that was added to a page which will be printed
   RichTextBlockOverflow lastRTBOOnPage;

   // Get the PrintTaskOptions
   PrintTaskOptions printingOptions = ((PrintTaskOptions)e.PrintTaskOptions);

   // Get the page description to deterimine how big the page is
   PrintPageDescription pageDescription = printingOptions.GetPageDescription(0);

   // We know there is at least one page to be printed. passing null as the first parameter to
   // AddOnePrintPreviewPage tells the function to add the first page.
   lastRTBOOnPage = AddOnePrintPreviewPage(null, pageDescription);

   // We know there are more pages to be added as long as the last RichTextBoxOverflow added to a print preview
   // page has extra content
   while (lastRTBOOnPage.HasOverflowContent && lastRTBOOnPage.Visibility == Windows.UI.Xaml.Visibility.Visible)
   {
         lastRTBOOnPage = AddOnePrintPreviewPage(lastRTBOOnPage, pageDescription);
   }

   if (PreviewPagesCreated != null)
   {
         PreviewPagesCreated.Invoke(printPreviewPages, null);
   }

   PrintDocument printDoc = (PrintDocument)sender;

   // Report the number of preview pages created
   printDoc.SetPreviewPageCount(printPreviewPages.Count, PreviewPageCountType.Intermediate);
}

Wenn eine bestimmte Seite in der Druckvorschau angezeigt werden soll, löst PrintManager das GetPreviewPage-Ereignis aus.When a particular page is to be shown in the print preview window, the PrintManager raises the GetPreviewPage event. Dies entspricht der MakePage-Methode der IPrintPreviewPageCollection-Schnittstelle.This corresponds with the MakePage method of the IPrintPreviewPageCollection interface. Der Ereignishandler, den Sie bei der Registrierung erstellt haben, wird zu diesem Zeitpunkt aufgerufen.The event handler you created during registration will be called at this time.

Legen Sie im GetPreviewPage-Ereignishandler (der GetPrintPreviewPage-Methode im UWP-Druckbeispiel) die entsprechende Seite des Druckdokuments fest.In the GetPreviewPage event handler (the GetPrintPreviewPage method in the UWP print sample), set the appropriate page on the print document.

protected virtual void GetPrintPreviewPage(object sender, GetPreviewPageEventArgs e)
{
   PrintDocument printDoc = (PrintDocument)sender;
   printDoc.SetPreviewPage(e.PageNumber, printPreviewPages[e.PageNumber - 1]);
}

Nachdem der Benutzer auf die Druckschaltfläche geklickt hat, fordert PrintManager die abschließende Sammlung der an den Drucker zu sendenden Seiten an, indem die MakeDocument-Methode der IDocumentPageSource-Schnittstelle aufgerufen wird.Finally, once the user clicks the print button, the PrintManager requests the final collection of pages to send to the printer by calling the MakeDocument method of the IDocumentPageSource interface. In XAML löst dies das AddPages-Ereignis aus.In XAML, this raises the AddPages event. Der Ereignishandler, den Sie bei der Registrierung erstellt haben, wird zu diesem Zeitpunkt aufgerufen.The event handler you created during registration will be called at this time.

Im AddPages-Ereignishandler (der AddPrintPages-Methode im UWP-Druckbeispiel) fügen Sie dem PrintDocument-Objekt, das an den Drucker gesendet werden soll, Seiten aus der Seitensammlung hinzu.In the AddPages event handler (the AddPrintPages method in the UWP print sample), add pages from the page collection to the PrintDocument object to be sent to the printer. Wenn ein Benutzer bestimmte Seiten oder einen Seitenbereich zum Drucken angibt, verwenden Sie diese Informationen, um nur die Seiten hinzuzufügen, die tatsächlich an den Drucker gesendet werden.If a user specifies particular pages or a range of pages to print, you use that information here to add only the pages that will actually be sent to the printer.

protected virtual void AddPrintPages(object sender, AddPagesEventArgs e)
{
   // Loop over all of the preview pages and add each one to  add each page to be printied
   for (int i = 0; i < printPreviewPages.Count; i++)
   {
         // We should have all pages ready at this point...
         printDocument.AddPage(printPreviewPages[i]);
   }

   PrintDocument printDoc = (PrintDocument)sender;

   // Indicate that all of the print pages have been provided
   printDoc.AddPagesComplete();
}

Vorbereiten von DruckoptionenPrepare print options

Als Nächstes bereiten Sie Druckoptionen vor.Next prepare print options. Dieser Abschnitt beschreibt als Beispiel, wie die Seitenbereichsoption festgelegt wird, um das Drucken bestimmter Seiten zu gestatten.As an example, this section will describe how to set the page range option to allow printing of specific pages. Weitere Optionen finden Sie unter Anpassen der Benutzeroberfläche für die Druckvorschau.For more advanced options, see Customize the print preview UI.

In diesem Schritt wird eine neue Druckoption erstellt und eine Liste von Werten definiert, die die Option unterstützt. Dann wird die Option der Druckvorschau-UI hinzugefügt.This step creates a new print option, defines a list of values that the option supports, and then adds the option to the print preview UI. Die Seitenbereichsoption hat folgende Einstellungen:The page range option has these settings:

OptionsnameOption name AktionAction
Print allPrint all Druckt alle Seiten im Dokument.Print all pages in the document.
Print SelectionPrint Selection Druckt nur den vom Benutzer ausgewählten Inhalt.Print only the content the user selected.
Print RangePrint Range Zeigt ein Bearbeitungssteuerelement an, in das der Benutzer die zu druckenden Seiten eingeben kann.Display an edit control into which the user can enter the pages to print.

Ändern Sie zunächst den PrintTaskRequested-Ereignishandler, um den Code zum Abrufen eines PrintTaskOptionDetails-Objekts hinzuzufügen.First, modify the PrintTaskRequested event handler to add the code to get a PrintTaskOptionDetails object.

PrintTaskOptionDetails printDetailedOptions = PrintTaskOptionDetails.GetFromPrintTaskOptions(printTask.Options);

Löschen Sie die Liste der Optionen, die in der Druckvorschau-Benutzeroberfläche angezeigt werden, und fügen Sie die Optionen hinzu, die angezeigt werden sollen, wenn der Benutzer in der App druckt.Clear the list of options that are shown in the print preview UI and add the options that you want to display when the user wants to print from the app.

Hinweis

 Die Optionen werden in der Druckvorschau-Benutzeroberfläche in der Reihenfolge angezeigt, in der sie hinzugefügt werden, wobei die erste Option oben im Fenster erscheint. The options appear in the print preview UI in the same order they are appended, with the first option shown at the top of the window.

IList<string> displayedOptions = printDetailedOptions.DisplayedOptions;

displayedOptions.Clear();
displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.Copies);
displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.Orientation);
displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.ColorMode);

Erstellen Sie die neue Druckoption, und initialisieren Sie die Liste der Optionswerte.Create the new print option and initialize the list of option values.

// Create a new list option
PrintCustomItemListOptionDetails pageFormat = printDetailedOptions.CreateItemListOption("PageRange", "Page Range");
pageFormat.AddItem("PrintAll", "Print all");
pageFormat.AddItem("PrintSelection", "Print Selection");
pageFormat.AddItem("PrintRange", "Print Range");

Fügen Sie Ihre benutzerdefinierte Druckoption hinzu, und weisen Sie den Ereignishandler zu.Add your custom print option and assign the event handler. Die benutzerdefinierte Option wird als Letztes hinzugefügt, sodass sie am Ende der Optionsliste erscheint.The custom option is appended last so that it appears at the bottom of the list of options. Sie können sie aber an einer beliebigen Stelle der Liste platzieren. Benutzerdefinierte Druckoptionen müssen nicht zuletzt hinzugefügt werden.But you can put it anywhere in the list, custom print options don't need to be added last.

// Add the custom option to the option list
displayedOptions.Add("PageRange");

// Create new edit option
PrintCustomTextOptionDetails pageRangeEdit = printDetailedOptions.CreateTextOption("PageRangeEdit", "Range");

// Register the handler for the option change event
printDetailedOptions.OptionChanged += printDetailedOptions_OptionChanged;

Die CreateTextOption-Methode erstellt das Textfeld Bereich.The CreateTextOption method creates the Range text box. Hier gibt der Benutzer die zu druckenden Seiten ein, wenn die Option Druckbereich ausgewählt wurde.This is where the user enters the specific pages they want to print when they select the Print Range option.

Behandeln von DruckoptionsänderungenHandle print option changes

Der OptionChanged-Ereignishandler ist im Wesentlichen für zwei Dinge zuständig.The OptionChanged event handler does two things. Erstens blendet er das Texteingabefeld für den Seitenbereich je nach der vom Benutzer ausgewählten Seitenbereichsoption ein und aus.First, it shows and hides the text edit field for the page range depending on the page range option that the user selected. Zweitens testet er den Text, den der Benutzer in das Seitenbereich-Textfeld eingibt, um sicherzustellen, dass es sich um einen gültigen Seitenbereich für das Dokument handelt.Second, it tests the text entered into the page range text box to make sure that it represents a valid page range for the document.

Dieses Beispiel zeigt, wie die Änderungs Ereignisse von Druckoptionen im Beispiel für den UWP-Druckbehandelt werden.This example shows how print option change events are handled in the UWP print sample.

async void printDetailedOptions_OptionChanged(PrintTaskOptionDetails sender, PrintTaskOptionChangedEventArgs args)
{
   if (args.OptionId == null)
   {
         return;
   }

   string optionId = args.OptionId.ToString();

   // Handle change in Page Range Option
   if (optionId == "PageRange")
   {
         IPrintOptionDetails pageRange = sender.Options[optionId];
         string pageRangeValue = pageRange.Value.ToString();

         selectionMode = false;

         switch (pageRangeValue)
         {
            case "PrintRange":
               // Add PageRangeEdit custom option to the option list
               sender.DisplayedOptions.Add("PageRangeEdit");
               pageRangeEditVisible = true;
               await scenarioPage.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
               {
                     ShowContent(null);
               });
               break;
            case "PrintSelection":
               await scenarioPage.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
               {
                     Scenario4PageRange page = (Scenario4PageRange)scenarioPage;
                     PageToPrint pageContent = (PageToPrint)page.PrintFrame.Content;
                     ShowContent(pageContent.TextContentBlock.SelectedText);
               });
               RemovePageRangeEdit(sender);
               break;
            default:
               await scenarioPage.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
               {
                     ShowContent(null);
               });
               RemovePageRangeEdit(sender);
               break;
         }

         Refresh();
   }
   else if (optionId == "PageRangeEdit")
   {
         IPrintOptionDetails pageRange = sender.Options[optionId];
         // Expected range format (p1,p2...)*, (p3-p9)* ...
         if (!Regex.IsMatch(pageRange.Value.ToString(), @"^\s*\d+\s*(\-\s*\d+\s*)?(\,\s*\d+\s*(\-\s*\d+\s*)?)*$"))
         {
            pageRange.ErrorText = "Invalid Page Range (eg: 1-3, 5)";
         }
         else
         {
            pageRange.ErrorText = string.Empty;
            try
            {
               GetPagesInRange(pageRange.Value.ToString());
               Refresh();
            }
            catch (InvalidPageException ipex)
            {
               pageRange.ErrorText = ipex.Message;
            }
         }
   }
}

Tipp

 Ausführliche GetPagesInRange Informationen dazu, wie Sie den Seitenbereich analysieren, der vom Benutzer im Textfeld Bereich angezeigt wird, finden Sie unter der-Methode im Beispiel für den UWP-Druck . See the GetPagesInRange method in the UWP print sample for details on how to parse the page range the user enters in the Range text box.

Vorschau auf ausgewählte SeitenPreview selected pages

Die Formatierung des Inhalts Ihrer App zum Drucken hängt von der Art der App und deren Inhalt ab.How you format your app's content for printing depends on the nature of your app and its content. Eine druckhilfsklasse, die im UWP-Druck Beispiel verwendet wird, um den Inhalt für den Druck zu formatieren.A print helper class in used in the UWP print sample to format the content for printing.

Beim Drucken einer Teilmenge von Seiten gibt es mehrere Möglichkeiten, den Inhalt in der Seitenansicht anzuzeigen.When printing a subset of pages, there are several ways to show the content in the print preview. Unabhängig davon, welche Methode Sie zum Anzeigen des Seitenbereichs in der Druckvorschau ausgewählt haben, darf der Ausdruck nur die ausgewählten Seiten enthalten.Regardless of the method you chose to show the page range in the print preview, the printed output must contain only the selected pages.

  • Alle Seiten in der Druckvorschau anzeigen, unabhängig davon, ob ein Seitenbereich festgelegt wurde. Der Benutzer muss selbst wissen, welche Seiten ausgedruckt werden.Show all the pages in the print preview whether a page range is specified or not, leaving the user to know which pages will actually be printed.
  • Nur den vom Benutzer ausgewählten Seitenbereich in der Druckvorschau anzeigen und die Anzeige aktualisieren, wenn der Benutzer den Seitenbereich ändert.Show only the pages selected by the user's page range in the print preview, updating the display whenever the user changes the page range.
  • Alle Seiten in der Druckvorschau anzeigen, dabei aber alle Seiten ausgrauen, die nicht in dem vom Benutzer ausgewählten Seitenbereich liegen.Show all the pages in print preview, but grey out the pages that are not in page range selected by the user.