/// <summary> /// Option change event handler /// </summary> /// <param name="sender">The print task option details for which an option changed.</param> /// <param name="args">The event arguments containing the id of the changed option.</param> private async void PrintDetailedOptionsOptionChanged(PrintTaskOptionDetails sender, PrintTaskOptionChangedEventArgs args) { bool invalidatePreview = false; // For this scenario we are interested only when the 2 custom options change (photoSize & scaling) in order to trigger a preview refresh. // Default options that change page aspect will trigger preview invalidation (refresh) automatically. // It is safe to ignore verifying other options and(or) combinations here because during Paginate event(CreatePrintPreviewPages) we check if the PageDescription changed. if (args.OptionId == null) { return; } string optionId = args.OptionId.ToString(); if (optionId == "photoSize") { IPrintOptionDetails photoSizeOption = sender.Options[optionId]; string photoSizeValue = photoSizeOption.Value as string; if (!string.IsNullOrEmpty(photoSizeValue)) { switch (photoSizeValue) { case "SizeFullPage": photoSize = PhotoSize.SizeFullPage; break; case "Size4x6": photoSize = PhotoSize.Size4x6; break; case "Size5x7": photoSize = PhotoSize.Size5x7; break; case "Size8x10": photoSize = PhotoSize.Size8x10; break; } invalidatePreview = true; } } if (optionId == "scaling") { IPrintOptionDetails scalingOption = sender.Options[optionId]; string scalingValue = scalingOption.Value as string; if (!string.IsNullOrEmpty(scalingValue)) { switch (scalingValue) { case "Crop": photoScale = Scaling.Crop; break; case "ShrinkToFit": photoScale = Scaling.ShrinkToFit; break; } invalidatePreview = true; } } // Invalidate preview if one of the 2 options (photoSize, scaling) changed. if (invalidatePreview) { await scenarioPage.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, printDocument.InvalidatePreview); } }
/// <summary> /// Option change event handler /// </summary> /// <param name="sender">PrintTaskOptionsDetails object</param> /// <param name="args">the event arguments containing the changed option id</param> 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; PacketMessaging.Views.FormsPage 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; } } } }