Personalizzare l'interfaccia utente dell'anteprima di stampa

Questo argomento descrive come personalizzare le opzioni di stampa e le impostazioni nell'interfaccia utente dell'anteprima di stampa. Per altre info sulla stampa, vedere Stampa dalla tua app.

Suggerimento La maggior parte degli esempi in questo argomento si basa sull'esempio di stampa piattaforma UWP (Universal Windows Platform) (UWP).

API importanti

Personalizzare le opzioni di stampa

Per impostazione predefinita, l'interfaccia utente dell'anteprima di stampa mostra le opzioni di stampa ColorMode, Copie, e Orientamento. Oltre a quelli, sono disponibili diverse altre opzioni comuni per la stampante che è possibile aggiungere all'interfaccia utente dell'anteprima di stampa:

Queste opzioni sono definite nella classe StandardPrintTaskOptions. È possibile aggiungere o rimuovere opzioni dall'elenco di opzioni visualizzate nell'interfaccia utente dell'anteprima di stampa. È anche possibile modificare l'ordine in cui vengono visualizzati e impostare le impostazioni predefinite visualizzate all'utente.

Tuttavia, le modifiche apportate tramite questo metodo influiscono solo sull'interfaccia utente dell'anteprima di stampa. L'utente può sempre accedere a tutte le opzioni supportate dalla stampante selezionando con un tocco **Altre impostazioni*- nell'interfaccia utente dell'anteprima di stampa.

Nota

Anche se l'app può specificare le opzioni di stampa da visualizzare, nell'interfaccia utente dell'anteprima di stampa vengono visualizzate solo quelle supportate dalla stampante selezionata. L'interfaccia utente di stampa non mostrerà le opzioni non supportate dalla stampante selezionata.

Definire le opzioni da visualizzare

Quando la schermata dell'app viene caricata, viene registrata per il contratto di stampa. Parte della registrazione include la definizione del gestore eventi PrintTaskRequested. Il codice per personalizzare le opzioni visualizzate nell'interfaccia utente dell'anteprima di stampa viene aggiunto al gestore eventi **PrintTaskRequested*- .

Modificare il gestore eventi PrintTaskRequested per includere le istruzioni di printTask.options che configurano le impostazioni di stampa da visualizzare nell'interfaccia utente dell'anteprima di stampa. Per la schermata dell'app per cui si intende visualizzare un elenco personalizzato di opzioni di stampa, eseguire l'override del gestore eventi **PrintTaskRequested*- nella classe helper per includere il codice che specifica le opzioni da visualizzare quando viene stampata la schermata.

protected override void PrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs e)
{
   PrintTask printTask = null;
   printTask = e.Request.CreatePrintTask("C# Printing SDK Sample", sourceRequestedArgs =>
   {
         IList<string> displayedOptions = printTask.Options.DisplayedOptions;

         // Choose the printer options to be shown.
         // The order in which the options are appended determines the order in which they appear in the UI
         displayedOptions.Clear();
         displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.Copies);
         displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.Orientation);
         displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.MediaSize);
         displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.Collation);
         displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.Duplex);

         // Preset the default value of the printer option
         printTask.Options.MediaSize = PrintMediaSize.NorthAmericaLegal;

         // 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);
               });
            }
         };

         sourceRequestedArgs.SetSource(printDocumentSource);
   });
}

Importante

La chiamata a displayOptions.clear() rimuove tutte le opzioni di stampa dall'interfaccia utente dell'anteprima di stampa, incluso il collegamento **Altre impostazioni*- . Assicurarsi di aggiungere le opzioni da visualizzare nell'interfaccia utente dell'anteprima di stampa.

Specificare le opzioni predefinite

È anche possibile impostare i valori predefiniti delle opzioni nell'interfaccia utente dell'anteprima di stampa. La riga di codice seguente, dall'ultimo esempio, imposta il valore predefinito dell'opzione MediaSize .

         // Preset the default value of the printer option
         printTask.Options.MediaSize = PrintMediaSize.NorthAmericaLegal;

Aggiungere nuove opzioni di stampa

Qui viene illustrato come creare una nuova opzione di stampa, definire un elenco di valori supportati dall'opzione e quindi aggiungere l'opzione all'anteprima di stampa. Come nella sezione precedente, aggiungere la nuova opzione di stampa nel gestore eventi PrintTaskRequested.

Ottenere prima di tutto un oggetto PrintTaskOptionDetails. Viene usato per aggiungere la nuova opzione di stampa all'interfaccia utente dell'anteprima di stampa. Deselezionare quindi l'elenco delle opzioni visualizzate nell'interfaccia utente dell'anteprima di stampa e aggiungere le opzioni da visualizzare quando l'utente vuole stampare dall'app. Successivamente, creare la nuova opzione di stampa e inizializzare l'elenco dei valori di opzione. Aggiungere infine la nuova opzione e assegnare un gestore per l'evento **OptionChanged*- .

protected override void PrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs e)
{
   PrintTask printTask = null;
   printTask = e.Request.CreatePrintTask("C# Printing SDK Sample", sourceRequestedArgs =>
   {
         PrintTaskOptionDetails printDetailedOptions = PrintTaskOptionDetails.GetFromPrintTaskOptions(printTask.Options);
         IList<string> displayedOptions = printDetailedOptions.DisplayedOptions;

         // Choose the printer options to be shown.
         // The order in which the options are appended determines the order in which they appear in the UI
         displayedOptions.Clear();

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

         // Create a new list option
         PrintCustomItemListOptionDetails pageFormat = printDetailedOptions.CreateItemListOption("PageContent", "Pictures");
         pageFormat.AddItem("PicturesText", "Pictures and text");
         pageFormat.AddItem("PicturesOnly", "Pictures only");
         pageFormat.AddItem("TextOnly", "Text only");

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

         printDetailedOptions.OptionChanged += printDetailedOptions_OptionChanged;

         // 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);
               });
            }
         };

         sourceRequestedArgs.SetSource(printDocumentSource);
   });
}

Le opzioni vengono visualizzate nell'interfaccia utente dell'anteprima di stampa nello stesso ordine in cui vengono aggiunte, con la prima opzione visualizzata nella parte superiore della finestra. In questo esempio, l'opzione personalizzata viene aggiunta per ultima in modo che venga visualizzata nella parte inferiore dell'elenco di opzioni. Tuttavia, è possibile inserirlo ovunque nell'elenco; le opzioni di stampa personalizzate non devono essere aggiunte per ultimo.

Quando l'utente modifica l'opzione selezionata nell'opzione personalizzata, aggiornare l'immagine dell'anteprima di stampa. Richiamare il metodo InvalidatePreview per ridisegnare l'immagine nell'interfaccia utente dell'anteprima di stampa, come illustrato di seguito.

async void printDetailedOptions_OptionChanged(PrintTaskOptionDetails sender, PrintTaskOptionChangedEventArgs args)
{
   // Listen for PageContent changes
   string optionId = args.OptionId as string;
   if (string.IsNullOrEmpty(optionId))
   {
         return;
   }

   if (optionId == "PageContent")
   {
         await scenarioPage.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
         {
            printDocument.InvalidatePreview();
         });
   }
}

Vedi anche