User Tools

Site Tools


source_code_wpfdesktopeditionsample_webprintersample.zip

Source Code WpfDesktopEditionSample WebPrinterSample.zip

Sample.aspx

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Sample.aspx.cs" Inherits="CSSamples.Samples.Sample" %>  
 
 <%@ Register Assembly="WebEdition" Namespace="ThinkGeo.MapSuite.WebEdition" TagPrefix="cc1" %>  
 <%@ Register Src="Footer.ascx" TagName="Footer" TagPrefix="uc1" %>  
 <%@ Register Src="Banner.ascx" TagName="Banner" TagPrefix="uc2" %>  
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
 <html xmlns="http://www.w3.org/1999/xhtml">  
 <head id="Head1" runat="server">  
     <link href="Resources/css.css" rel="stylesheet" type="text/css" />  
     <title>Display a Simple Map - Map Suite Web Sample application</title>  
 </head>  
 <body>  
     <form id="form1" runat="server">  
     <table border="0" cellpadding="0" cellspacing="0" style="width: 100%;">  
         <tr>  
             <td>  
                 <uc2:Banner ID="Header1" runat="server" />  
             </td>  
         </tr>  
         <tr>  
             <td align="center">  
                 <div id="MapContainer">  
                     <div id="MapControlerBox">  
                         <div>  
                             <asp:Label ID="ControlLabel" type="text" runat="server">Instructions</asp:Label>  
                         </div>  
                         <div>  
                             <asp:Label ID="ControlDescription" type="text" runat="server">This sample shows how to do the print preview</asp:Label>  
                         </div>  
                         <div id="ControlPanel">  
                             <asp:Label ID="labPageSize" runat="server">Paper Size:</asp:Label>  
                             <asp:DropDownList ID="lisSize" runat="server" Width="180px" ClientIDMode="Static"  
                                 AutoPostBack="true" OnSelectedIndexChanged="lisSize_SelectedIndexChanged">  
                                 <asp:ListItem>ANSI A- 8.5 x 11 (A4)</asp:ListItem>  
                                 <asp:ListItem>ANSI B- 11 x 17 (A3)</asp:ListItem>  
                                 <asp:ListItem>ANSI C- 17 x 22 (A2)</asp:ListItem>  
                                 <asp:ListItem>ANSI D- 22 x 34 (A1)</asp:ListItem>  
                                 <asp:ListItem>ANSI E- 34 x 44 (A0)</asp:ListItem>  
                             </asp:DropDownList>  
                             <asp:Label ID="labOrentation" runat="server">Orientation</asp:Label>  
                             <asp:DropDownList ID="lisOrientation" runat="server" Width="180px" AutoPostBack="true"  
                                 ClientIDMode="Static" OnSelectedIndexChanged="lisOrientation_SelectedIndexChanged">  
                                 <asp:ListItem>Portrait</asp:ListItem>  
                                 <asp:ListItem>Landscape</asp:ListItem>  
                             </asp:DropDownList>  
                             <asp:Label ID="labPercentage" runat="server">Percentage</asp:Label>  
                             <asp:DropDownList ID="lisPercentage" runat="server" AutoPostBack="true" Width="180px"  
                                 ClientIDMode="Static" OnSelectedIndexChanged="lisPercentage_SelectedIndexChanged">  
                                 <asp:ListItem>5%</asp:ListItem>  
                                 <asp:ListItem>10%</asp:ListItem>  
                                 <asp:ListItem>20%</asp:ListItem>  
                                 <asp:ListItem>30%</asp:ListItem>  
                                 <asp:ListItem>40%</asp:ListItem>  
                                 <asp:ListItem Selected="True">50%</asp:ListItem>  
                                 <asp:ListItem>60%</asp:ListItem>  
                                 <asp:ListItem>70%</asp:ListItem>  
                                 <asp:ListItem>80%</asp:ListItem>  
                                 <asp:ListItem>90%</asp:ListItem>  
                                 <asp:ListItem>100%</asp:ListItem>  
                                 <asp:ListItem>110%</asp:ListItem>  
                                 <asp:ListItem>120%</asp:ListItem>  
                                 <asp:ListItem>150%</asp:ListItem>  
                                 <asp:ListItem>200%</asp:ListItem>  
                                 <asp:ListItem>300%</asp:ListItem>  
                                 <asp:ListItem>400%</asp:ListItem>  
                                 <asp:ListItem>500%</asp:ListItem>  
                                 <asp:ListItem>600%</asp:ListItem>  
                                 <asp:ListItem>700%</asp:ListItem>  
                                 <asp:ListItem>800%</asp:ListItem>  
                             </asp:DropDownList>  
                         </div>  
                         <div id="ControlPanel2">  
                             <div>  
                                 <asp:Label ID="labExport" type="text" runat="server" Text="Export:" />  
                             </div>  
                             <asp:Button ID="btnToBitmap" Width="100px" runat="server" Text="To Bitmap" OnClick="btnToBitmap_Click" />  
                             <asp:Button ID="btnToPDF" Width="100px" runat="server" Text="To PDF" OnClick="btnToPDF_Click" />  
                             <asp:Button ID="btnToPrinter" Width="100px" runat="server" Text="To Printer" OnClick="btnToPrinter_Click" />  
                         </div>  
                         <div id="ControlPanel3">  
                             <div>  
                                 <asp:Label ID="labPan" type="text" runat="server" Text="Pan around the map:" />  
                             </div>  
                             <div id="ZoomList">  
                                 <asp:Button ID="btnZoomIn" Width="70px" runat="server" Text="ZoomIn" OnClick="btnZoomIn_Click" />  
                                 <asp:Button ID="btnZoomOut" Width="70px" runat="server" Text="ZoomOut" OnClick="btnZoomOut_Click" />  
                             </div>  
                             <div id="PanList1">  
                                 <asp:Button ID="btnPanNorth" Width="30px" runat="server" Text="N" OnClick="btnPan_Click" />  
                             </div>  
                             <div id="PanList2">  
                                 <asp:Button ID="btnPanWest" Width="30px" runat="server" Text="W" OnClick="btnPan_Click" />  
                                 <asp:Button ID="btnPanEast" Width="30px" runat="server" Text="E" OnClick="btnPan_Click" />  
                             </div>  
                             <div id="PanList3">  
                                 <asp:Button ID="btnPanSouth" Width="30px" runat="server" Text="S" OnClick="btnPan_Click" />  
                             </div>  
                         </div>  
                     </div>  
                     <div id="MapAddTool">  
                         <div>  
                             <asp:Label ID="AddToolsLabel" type="text" runat="server">Instructions</asp:Label>  
                         </div>  
                         <div id="AddToolBox">  
                             <div id="normal">  
                                 <asp:Label ID="ToolDescription" type="text" runat="server">Tools</asp:Label>  
                             </div>  
                             <div id="AddBox">  
                                 <div id="ImageButton1">  
                                     <asp:ImageButton ID="btnAddLabel" runat="server" Height="25px" ImageUrl="~/Resources/_Label.png"  
                                         Width="100px" OnClick="btnAddContrl_Click" />  
                                 </div>  
                                 <div id="ImageButton2">  
                                     <asp:ImageButton ID="btnAddImage" runat="server" Height="25px" ImageUrl="~/Resources/iamge.png"  
                                         Width="100px" OnClick="btnAddContrl_Click" />  
                                 </div>  
                                 <div id="ImageButton3">  
                                     <asp:ImageButton ID="btnAddScaleLine" runat="server" Height="25px" ImageUrl="~/Resources/scale_line.png"  
                                         Width="100px" OnClick="btnAddContrl_Click" />  
                                 </div>  
                                 <div id="ImageButton4">  
                                     <asp:ImageButton ID="btnAddScaleBar" runat="server" Height="25px" ImageUrl="~/Resources/scale_Bar.png"  
                                         Width="100px" OnClick="btnAddContrl_Click" />  
                                 </div>  
                                 <div id="ImageButton5">  
                                     <asp:ImageButton ID="btnAddGrid" runat="server" Height="25px" ImageUrl="~/Resources/grid.png"  
                                         Width="100px" OnClick="btnAddContrl_Click" />  
                                 </div>  
                             </div>  
                         </div>  
                     </div>  
                     <div id="MapBox">  
                         <asp:ScriptManager ID="ScriptManager1" runat="server">  
                         </asp:ScriptManager>  
                         <asp:UpdatePanel ID="UpdatePanel1" runat="server">  
                             <ContentTemplate>  
                                 <cc1:Map ID="Map1" runat="server" Height="100%" Width="100%">  
                                 </cc1:Map>  
                             </ContentTemplate>  
                             <Triggers>  
                                 <asp:AsyncPostBackTrigger ControlID="btnToBitmap" EventName="Click" />  
                                 <asp:AsyncPostBackTrigger ControlID="btnToPDF" EventName="Click" />  
                                 <asp:AsyncPostBackTrigger ControlID="btnToPrinter" EventName="Click" />  
                                 <asp:AsyncPostBackTrigger ControlID="btnZoomIn" EventName="Click" />  
                                 <asp:AsyncPostBackTrigger ControlID="btnZoomOut" EventName="Click" />  
                                 <asp:AsyncPostBackTrigger ControlID="btnPanNorth" EventName="Click" />  
                                 <asp:AsyncPostBackTrigger ControlID="btnPanWest" EventName="Click" />  
                                 <asp:AsyncPostBackTrigger ControlID="btnPanEast" EventName="Click" />  
                                 <asp:AsyncPostBackTrigger ControlID="btnPanSouth" EventName="Click" />  
                                 <asp:AsyncPostBackTrigger ControlID="lisSize" EventName="SelectedIndexChanged" />  
                                 <asp:AsyncPostBackTrigger ControlID="lisOrientation" EventName="SelectedIndexChanged" />  
                                 <asp:AsyncPostBackTrigger ControlID="lisPercentage" EventName="SelectedIndexChanged" />  
                                 <asp:AsyncPostBackTrigger ControlID="btnAddLabel" EventName="Click" />  
                                 <asp:AsyncPostBackTrigger ControlID="btnAddImage" EventName="Click" />  
                                 <asp:AsyncPostBackTrigger ControlID="btnAddScaleLine" EventName="Click" />  
                                 <asp:AsyncPostBackTrigger ControlID="btnAddScaleBar" EventName="Click" />  
                                 <asp:AsyncPostBackTrigger ControlID="btnAddGrid" EventName="Click" />  
                             </Triggers>  
                         </asp:UpdatePanel>  
                     </div>  
                 </div>  
             </td>  
         </tr>  
         <tr>  
             <td>  
                 <uc1:Footer ID="Footer1" runat="server" />  
             </td>  
         </tr>  
     </table>  
     </form>  
 </body>  
 <script type="text/javascript">  
     function doRefresh() {  
         <%=ClientScript.GetPostBackEventReference(UpdatePanel1, "") %>;  
     }  
 
     function resizeElementHeight() {  
         var height = 0;  
         var width = 0;  
         var body = window.document.body;  
         if (window.innerHeight) {  
             height = window.innerHeight;  
         } else if (body.parentElement.clientHeight) {  
             height = body.parentElement.clientHeight;  
         } else if (body && body.clientHeight) {  
             height = body.clientHeight;  
         }  
 
         if (window.innerWidth) {  
             width = window.innerWidth;  
         } else if (body.parentElement.clientWidth) {  
             width = body.parentElement.clientWidth;  
         } else if (body && body.clientWidth) {  
             width = body.clientWidth;  
         }  
         document.getElementById('MapContainer').style.width = (width - 40) + 'px';  
         document.getElementById('MapContainer').style.height = (height - 170) + 'px';  
         containerWidth = document.getElementById('MapContainer').style.width;  
         containerHeight = document.getElementById('MapContainer').style.height;  
 
         if (width - 40 > 1050) {  
             document.getElementById('MapBox').style.width = (width - 444) + 'px';  
         }  
         else {  
             document.getElementById('MapBox').style.width = '646px';  
         }  
 
         if ((height - 170) > 550) {  
             document.getElementById('MapBox').style.height = (height - 170) + 'px';  
             document.getElementById('MapControlerBox').style.height = (height - 170) + 'px';  
             document.getElementById('MapAddTool').style.height = (height - 170) + 'px';  
         }  
         else {  
             document.getElementById('MapBox').style.height = '550px';  
             document.getElementById('MapControlerBox').style.height = '550px';  
             document.getElementById('MapAddTool').style.height = '550px';  
         }  
         if(alreadyrun){  
             doRefresh();  
             alreadyrun=0;  
         }  
     }  
     var alreadyrun = 0  
     if (document.addEventListener)  
         document.addEventListener("DOMContentLoaded", function () { alreadyrun = 1; resizeElementHeight() }, false)  
     else if (document.all && !window.opera) {  
         document.write('<script type="text/javascript" id="contentloadtag" defer="defer" src="javascript:void(0)"><\/script>')  
         var contentloadtag = document.getElementById("contentloadtag")  
         contentloadtag.onreadystatechange = function () {  
             if (this.readyState == "complete") {  
                 alreadyrun = 1  
                 resizeElementHeight()  
             }  
         }  
     }  
     window.onload = function () {  
         setTimeout("if (!alreadyrun) resizeElementHeight()", 0);  
     }  
 
     window.onresize=function()  
     {  
         setTimeout("if (!alreadyrun) resizeElementHeight()", 0);  
     }  
 </script>  
 </html>  
 

Sample.aspx.cs

 using System;  
 using System.Collections.ObjectModel;  
 using System.Data;  
 using System.Diagnostics;  
 using System.Drawing;  
 using System.Drawing.Printing;  
 using System.Text;  
 using System.Web.UI;  
 using System.Web.UI.WebControls;  
 using PdfSharp;  
 using PdfSharp.Pdf;  
 using ThinkGeo.MapSuite.Core;  
 using ThinkGeo.MapSuite.WebEdition;  
 
 namespace CSSamples.Samples  
 {  
     public partial class Sample : System.Web.UI.Page  
     {  
         #region add PrinterLayer Elements  
 
         protected void Page_Load(object sender, EventArgs e)  
         {  
             if (!Page.IsPostBack)  
             {  
                 SetupMapWithBlankPage();  
                 AddMapLayer();  
                 AddTitleLayer();  
             }  
         }  
 
         private void SetupMapWithBlankPage()  
         {  
             Map1.MapTools.Logo.Enabled = false;  
             Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));  
 
             Map1.MapUnit = GeographyUnit.Meter;  
 
             PagePrinterLayer pagePrinterLayer = new PagePrinterLayer(PrinterPageSize.AnsiA, PrinterOrientation.Portrait);  
             pagePrinterLayer.Open();  
 
             Map1.ZoomLevelSet = new PrinterZoomLevelSet(Map1.MapUnit, PrinterHelper.GetPointsPerGeographyUnit(Map1.MapUnit));  
             Map1.CurrentExtent = pagePrinterLayer.GetBoundingBox();  
             Map1.CurrentScale = PrinterHelper.GetPointsPerGeographyUnit(Map1.MapUnit) * 2;  
 
             LayerOverlay printerInteractiveOverlay = new LayerOverlay();  
             printerInteractiveOverlay.Name = "PageOverlay";  
             printerInteractiveOverlay.Layers.Add("PageLayer", pagePrinterLayer);  
             Map1.CustomOverlays.Add(printerInteractiveOverlay);  
 
             pagePrinterLayer.Close();  
         }  
 
         private void AddMapLayer()  
         {  
             RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);  
             ShapeFileFeatureLayer worldMapLayer = new ShapeFileFeatureLayer(MapPath(@"~\SampleData\Countries02.shp"));  
             worldMapLayer.FeatureSource.Projection = new Proj4Projection(Proj4Projection.GetDecimalDegreesParametersString(), Proj4Projection.GetGoogleMapParametersString());  
             worldMapLayer.FeatureSource.Projection.Open();  
             worldMapLayer.Open();  
 
             Collection<Feature> features = worldMapLayer.QueryTools.GetAllFeatures(ReturningColumnsType.AllColumns);  
             worldMapLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;  
             worldMapLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
 
             MapPrinterLayer mapPrinterLayer = new MapPrinterLayer();  
             mapPrinterLayer.BackgroundMask = new AreaStyle(new GeoPen(GeoColor.StandardColors.Black, 1));  
             mapPrinterLayer.MapUnit = GeographyUnit.Meter;  
             mapPrinterLayer.MapExtent = worldMapLayer.GetBoundingBox();  
             worldMapLayer.Close();  
 
             mapPrinterLayer.SetPosition(8, 7, pageBoundingbox.GetCenterPoint().X, pageBoundingbox.GetCenterPoint().Y + 1, PrintingUnit.Inch);  
             mapPrinterLayer.Layers.Add(worldMapLayer);  
 
             LayerOverlay printerInteractiveOverlay = GetPageOverlay();  
             printerInteractiveOverlay.Layers.Add("mapPrinterLayer", mapPrinterLayer);  
         }  
 
         private void AddTitleLayer()  
         {  
             RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);  
             LabelPrinterLayer labelPrinterLayer = new LabelPrinterLayer();  
 
             labelPrinterLayer.Text = "Population > 70 Million";  
             labelPrinterLayer.Font = new GeoFont("Arial", 10, DrawingFontStyles.Bold);  
             labelPrinterLayer.TextBrush = new GeoSolidBrush(GeoColor.StandardColors.Black);  
             labelPrinterLayer.PrinterWrapMode = PrinterWrapMode.AutoSizeText;  
 
             PointShape labelCenter = new PointShape();  
             labelCenter.X = pageBoundingbox.UpperRightPoint.X - pageBoundingbox.Width / 2;  
             labelCenter.Y = pageBoundingbox.UpperLeftPoint.Y - .5;  
             labelPrinterLayer.SetPosition(5, 1, labelCenter, PrintingUnit.Inch);  
 
             LayerOverlay printerInteractiveOverlay = GetPageOverlay();  
             printerInteractiveOverlay.Layers.Add("title", labelPrinterLayer);  
         }  
 
         private void AddGridLayer()  
         {  
             RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);  
             DataGridPrinterLayer dataGridPrinterLayer = new DataGridPrinterLayer();  
             dataGridPrinterLayer.TextFont = new GeoFont("Arial", 8);  
             dataGridPrinterLayer.TextHorizontalAlignment = TextHorizontalAlignment.Left;  
 
             dataGridPrinterLayer.DataTable = new DataTable();  
             dataGridPrinterLayer.DataTable.Columns.Add("FIPS_CNTRY");  
             dataGridPrinterLayer.DataTable.Columns.Add("CNTRY_NAME");  
             dataGridPrinterLayer.DataTable.Columns.Add("LONG_NAME");  
             dataGridPrinterLayer.DataTable.Columns.Add("POP_CNTRY");  
 
             ShapeFileFeatureLayer postgreLayer = (((MapPrinterLayer)GetPageOverlay().Layers["mapPrinterLayer"]).Layers[0]) as ShapeFileFeatureLayer;  
 
             postgreLayer.Open();  
             RectangleShape _boundingbox = postgreLayer.FeatureSource.GetBoundingBox();  
             Collection<Feature> features = postgreLayer.QueryTools.GetAllFeatures(ReturningColumnsType.AllColumns);  
             postgreLayer.Close();  
 
             int pageSize = 0;  
             foreach (Feature feature in features)  
             {  
                 if (pageSize < 11 && int.Parse(feature.ColumnValues["POP_CNTRY"]) > 70000000)  
                 {  
                     pageSize++;  
 
                     dataGridPrinterLayer.DataTable.Rows.Add(new object[4] { feature.ColumnValues["FIPS_CNTRY"], feature.ColumnValues["CNTRY_NAME"], feature.ColumnValues["LONG_NAME"], feature.ColumnValues["POP_CNTRY"] });  
                 }  
             }  
 
             dataGridPrinterLayer.SetPosition(8, 2.5, pageBoundingbox.GetCenterPoint().X, pageBoundingbox.GetCenterPoint().Y - 4, PrintingUnit.Inch);  
 
             LayerOverlay printerInteractiveOverlay = GetPageOverlay();  
             if (printerInteractiveOverlay.Layers.Contains("grid"))  
             {  
                 string script = @"alert('We have added a data grid!');";  
                 ScriptManager.RegisterStartupScript(this, this.GetType(), "alertForm", script, true);  
             }  
             else  
             {  
                 printerInteractiveOverlay.Layers.Add("grid", dataGridPrinterLayer);  
             }  
         }  
 
         private void AddLogoImage()  
         {  
             GeoImage compassGeoImage = new GeoImage(MapPath(@"~\SampleData\Compass.png"));  
             ImagePrinterLayer imagePrinterLayer = new ImagePrinterLayer(compassGeoImage);  
 
             RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);  
             imagePrinterLayer.SetPosition(.75, .75, pageBoundingbox.GetCenterPoint().X + 3.5, pageBoundingbox.GetCenterPoint().Y - 2.0, PrintingUnit.Inch);  
 
             LayerOverlay printerInteractiveOverlay = GetPageOverlay();  
             if (printerInteractiveOverlay.Layers.Contains("logo"))  
             {  
                 string script = @"alert('We have added an image!');";  
                 ScriptManager.RegisterStartupScript(this, this.GetType(), "alertForm", script, true);  
             }  
             else  
             {  
                 printerInteractiveOverlay.Layers.Add("logo", imagePrinterLayer);  
             }  
         }  
 
         private void AddScaleLineLayer()  
         {  
             LayerOverlay printerInteractiveOverlay = GetPageOverlay();  
             MapPrinterLayer mapPrinterLayer = (MapPrinterLayer)printerInteractiveOverlay.Layers["mapPrinterLayer"];  
             ScaleLinePrinterLayer scaleLinePrinterLayer = new ScaleLinePrinterLayer(mapPrinterLayer);  
 
             scaleLinePrinterLayer.MapUnit = GeographyUnit.Meter;  
             RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);  
             scaleLinePrinterLayer.SetPosition(1.25, .25, pageBoundingbox.GetCenterPoint().X - 3.25, pageBoundingbox.GetCenterPoint().Y - 2.25, PrintingUnit.Inch);  
 
             if (printerInteractiveOverlay.Layers.Contains("ScaleLineLayer"))  
             {  
                 string script = @"alert('We have added a scale line!');";  
                 ScriptManager.RegisterStartupScript(this, this.GetType(), "alertForm", script, true);  
             }  
             else  
             {  
                 printerInteractiveOverlay.Layers.Add("ScaleLineLayer", scaleLinePrinterLayer);  
             }  
         }  
 
         private void AddLabelLayer()  
         {  
             StringBuilder noteSpace = new StringBuilder();  
             noteSpace.Append("Notes: ");  
             for (int i = 0; i < 160; i++)  
             {  
                 noteSpace.Append("_ ");  
             }  
 
             LabelPrinterLayer labelPrinterLayer = new LabelPrinterLayer();  
             labelPrinterLayer.Text = noteSpace.ToString();  
             labelPrinterLayer.Font = new GeoFont("Arial", 14, DrawingFontStyles.Regular);  
             labelPrinterLayer.TextBrush = new GeoSolidBrush(GeoColor.StandardColors.Black);  
             labelPrinterLayer.PrinterWrapMode = PrinterWrapMode.WrapText;  
 
             RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);  
             double noteSpaceWidth = 3.6;  
             labelPrinterLayer.SetPosition(noteSpaceWidth, 2, pageBoundingbox.LowerLeftPoint.X + 0.25 + noteSpaceWidth / 2 + 4.3, pageBoundingbox.LowerLeftPoint.Y + 1.5, PrintingUnit.Inch);  
 
             LayerOverlay printerInteractiveOverLay = GetPageOverlay();  
             if (printerInteractiveOverLay.Layers.Contains("label"))  
             {  
                 string script = @"alert('We have added a label!');";  
                 ScriptManager.RegisterStartupScript(this, this.GetType(), "alertForm", script, true);  
             }  
             else  
             {  
                 printerInteractiveOverLay.Layers.Add("label", labelPrinterLayer);  
             }  
         }  
 
         #endregion  
 
         #region Helper Methods  
 
         private LayerOverlay GetPageOverlay()  
         {  
             foreach (var item in Map1.CustomOverlays)  
             {  
                 if (item.Name == "PageOverlay")  
                 {  
                     return (item as LayerOverlay);  
                 }  
             }  
             return null;  
         }  
 
         private RectangleShape GetPageBoundingBox(PrintingUnit unit)  
         {  
             PagePrinterLayer pagePrinterLayer = (PagePrinterLayer)GetPageOverlay().Layers["PageLayer"];  
             return pagePrinterLayer.GetPosition(unit);  
         }  
 
         private PageSize GetPdfPageSize(PrinterPageSize pageSize)  
         {  
             PageSize pdfPageSize = PageSize.Letter;  
             switch (pageSize)  
             {  
                 case PrinterPageSize.AnsiA:  
                     pdfPageSize = PageSize.Letter;  
                     break;  
                 case PrinterPageSize.AnsiB:  
                     pdfPageSize = PageSize.Ledger;  
                     break;  
                 case PrinterPageSize.AnsiC:  
                     pdfPageSize = PageSize.A2;  
                     break;  
                 case PrinterPageSize.AnsiD:  
                     pdfPageSize = PageSize.A1;  
                     break;  
                 case PrinterPageSize.AnsiE:  
                     pdfPageSize = PageSize.A0;  
                     break;  
                 case PrinterPageSize.Custom:  
                     throw new NotSupportedException();  
                 default:  
                     throw new NotSupportedException();  
             }  
             return pdfPageSize;  
         }  
 
         private PaperSize GetPrintPreviewPaperSize(PagePrinterLayer pagePrinterLayer)  
         {  
             PaperSize printPreviewPaperSize = new PaperSize("AnsiA", 850, 1100);  
             switch (pagePrinterLayer.PageSize)  
             {  
                 case PrinterPageSize.AnsiA:  
                     printPreviewPaperSize = new PaperSize("AnsiA", 850, 1100);  
                     break;  
                 case PrinterPageSize.AnsiB:  
                     printPreviewPaperSize = new PaperSize("AnsiB", 1100, 1700);  
                     break;  
                 case PrinterPageSize.AnsiC:  
                     printPreviewPaperSize = new PaperSize("AnsiC", 1700, 2200);  
                     break;  
                 case PrinterPageSize.AnsiD:  
                     printPreviewPaperSize = new PaperSize("AnsiD", 2200, 3400);  
                     break;  
                 case PrinterPageSize.AnsiE:  
                     printPreviewPaperSize = new PaperSize("AnsiE", 3400, 4400);  
                     break;  
                 case PrinterPageSize.Custom:  
                     printPreviewPaperSize = new PaperSize("Custom Size", (int)pagePrinterLayer.CustomWidth, (int)pagePrinterLayer.CustomHeight);  
                     break;  
                 default:  
                     break;  
             }  
 
             return printPreviewPaperSize;  
         }  
 
         #endregion  
 
         #region Export Buttons  
 
         protected void btnToBitmap_Click(object sender, EventArgs e)  
         {  
             PagePrinterLayer pagePrinterLayer = (PagePrinterLayer)(GetPageOverlay().Layers["PageLayer"]);  
 
             Bitmap bitmap = null;  
             try  
             {  
                 pagePrinterLayer.Open();  
                 bitmap = new Bitmap((int)pagePrinterLayer.GetBoundingBox().Width, (int)pagePrinterLayer.GetBoundingBox().Height);  
 
                 GdiPlusGeoCanvas gdiPlusGeoCanvas = new GdiPlusGeoCanvas();  
                 gdiPlusGeoCanvas.BeginDrawing(bitmap, pagePrinterLayer.GetBoundingBox(), Map1.MapUnit);  
 
                 Collection<SimpleCandidate> labelsInAllLayers = new Collection<SimpleCandidate>();  
                 foreach (Layer item in GetPageOverlay().Layers)  
                 {  
                     PrinterLayer printerLayer = (PrinterLayer)item;  
                     printerLayer.Open();  
                     printerLayer.IsDrawing = true;  
                     if (!(printerLayer is PagePrinterLayer))  
                     {  
                         printerLayer.Draw(gdiPlusGeoCanvas, labelsInAllLayers);  
                     }  
                     printerLayer.IsDrawing = false;  
                     printerLayer.Close();  
                 }  
 
                 gdiPlusGeoCanvas.EndDrawing();  
                 pagePrinterLayer.Close();  
                 string filename = MapPath(@"~\SampleData\PrintingResults.bmp");  
                 bitmap.Save(filename);  
                 Process.Start(filename);  
             }  
             catch (Exception ex)  
             {  
                 string script = @"alert('" + ex.Message + " " + ex.StackTrace + "');";  
                 ScriptManager.RegisterStartupScript(this, this.GetType(), "alertForm", script, true);  
             }  
             finally  
             {  
                 if (bitmap != null) { bitmap.Dispose(); }  
                 GetPageOverlay().Redraw();  
             }  
         }  
 
         protected void btnToPDF_Click(object sender, EventArgs e)  
         {  
             LayerOverlay printerInteractiveOverlay = GetPageOverlay();  
             PagePrinterLayer pagePrinterLayer = printerInteractiveOverlay.Layers["PageLayer"] as PagePrinterLayer;  
 
             PdfDocument pdfDocument = null;  
             PdfPage pdfPage = null;  
 
             try  
             {  
                 pdfDocument = new PdfDocument();  
                 pdfPage = pdfDocument.AddPage();  
                 pdfPage.Orientation = pagePrinterLayer.Orientation == PrinterOrientation.Portrait ? PageOrientation.Portrait : PageOrientation.Landscape;  
                 pdfPage.Size = GetPdfPageSize(pagePrinterLayer.PageSize);  
 
                 PdfGeoCanvas pdfGeoCanvas = new PdfGeoCanvas();  
                 pagePrinterLayer.Open();  
                 pdfGeoCanvas.BeginDrawing(pdfPage, pagePrinterLayer.GetBoundingBox(), Map1.MapUnit);  
                 pagePrinterLayer.Close();  
 
                 Collection<SimpleCandidate> labelsInAllLayers = new Collection<SimpleCandidate>();  
                 foreach (Layer item in printerInteractiveOverlay.Layers)  
                 {  
                     PrinterLayer printerLayer = item as PrinterLayer;  
                     printerLayer.Open();  
                     printerLayer.IsDrawing = true;  
                     if (!(printerLayer is PagePrinterLayer))  
                     {  
                         printerLayer.Draw(pdfGeoCanvas, labelsInAllLayers);  
                     }  
                     printerLayer.IsDrawing = false;  
                     printerLayer.Close();  
                 }  
 
                 pdfGeoCanvas.EndDrawing();  
 
                 string filename = MapPath(@"~\SampleData\PrintingResults.pdf");  
                 pdfDocument.Save(filename);  
                 Process.Start(filename);  
             }  
             catch (Exception ex)  
             {  
                 string script = @"alert('" + ex.Message + " " + ex.StackTrace + "');";  
                 ScriptManager.RegisterStartupScript(this, this.GetType(), "alertForm", script, true);  
             }  
             finally  
             {  
                 if (pdfDocument != null) { pdfDocument.Dispose(); }  
                 printerInteractiveOverlay.Redraw();  
             }  
         }  
 
         protected void btnToPrinter_Click(object sender, EventArgs e)  
         {  
             LayerOverlay printerInteractiveOverlay = GetPageOverlay();  
             PagePrinterLayer pagePrinterLayer = printerInteractiveOverlay.Layers["PageLayer"] as PagePrinterLayer;  
 
             PrintDocument printDocument = new PrintDocument();  
             printDocument.DefaultPageSettings.Landscape = true;  
             if (pagePrinterLayer.Orientation == PrinterOrientation.Portrait)  
             {  
                 printDocument.DefaultPageSettings.Landscape = false;  
             }  
 
             printDocument.DefaultPageSettings.PaperSize = GetPrintPreviewPaperSize(pagePrinterLayer);  
 
             PrinterGeoCanvas printerGeoCanvas = new PrinterGeoCanvas();  
             printerGeoCanvas.DrawingArea = new Rectangle(0, 0, Convert.ToInt32(printDocument.DefaultPageSettings.PrintableArea.Width), Convert.ToInt32(printDocument.DefaultPageSettings.PrintableArea.Height));  
             pagePrinterLayer.Open();  
             printerGeoCanvas.BeginDrawing(printDocument, pagePrinterLayer.GetBoundingBox(), Map1.MapUnit);  
             pagePrinterLayer.Close();  
 
             Collection<SimpleCandidate> labelsInAllLayers = new Collection<SimpleCandidate>();  
             foreach (Layer item in printerInteractiveOverlay.Layers)  
             {  
                 PrinterLayer printerLayer = item as PrinterLayer;  
                 printerLayer.Open();  
                 printerLayer.IsDrawing = true;  
                 if (!(printerLayer is PagePrinterLayer))  
                 {  
                     printerLayer.Draw(printerGeoCanvas, labelsInAllLayers);  
                 }  
                 printerLayer.IsDrawing = false;  
                 printerLayer.Close();  
             }  
 
             printerGeoCanvas.EndDrawing();  
             printerInteractiveOverlay.Redraw();  
         }  
 
         #endregion  
 
         #region Pan & Zoom Buttons  
 
         protected void btnZoomIn_Click(object sender, EventArgs e)  
         {  
             LayerOverlay printerInteractiveOverlay = GetPageOverlay();  
             MapPrinterLayer mapPrinterLayer = ((MapPrinterLayer)(printerInteractiveOverlay.Layers["mapPrinterLayer"]));  
             if (!mapPrinterLayer.IsOpen)  
             {  
                 mapPrinterLayer.Open();  
             }  
 
             ZoomLevelSet zoomLevelSet = new ZoomLevelSet();  
             double newScale = ZoomLevelSet.GetLowerZoomLevelScale(ExtentHelper.GetScale(mapPrinterLayer.MapExtent, (float)mapPrinterLayer.GetBoundingBox().Width, mapPrinterLayer.MapUnit), zoomLevelSet);  
             mapPrinterLayer.MapExtent = ExtentHelper.ZoomToScale(newScale, mapPrinterLayer.MapExtent, mapPrinterLayer.MapUnit, (float)mapPrinterLayer.GetBoundingBox().Width, (float)mapPrinterLayer.GetBoundingBox().Height);  
 
             printerInteractiveOverlay.Redraw();  
         }  
 
         protected void btnZoomOut_Click(object sender, EventArgs e)  
         {  
             LayerOverlay printerInteractiveOverlay = GetPageOverlay();  
             MapPrinterLayer mapPrinterLayer = ((MapPrinterLayer)(printerInteractiveOverlay.Layers["mapPrinterLayer"]));  
             if (!mapPrinterLayer.IsOpen)  
             {  
                 mapPrinterLayer.Open();  
             }  
 
             ZoomLevelSet zoomLevelSet = new ZoomLevelSet();  
             double newScale = ZoomLevelSet.GetHigherZoomLevelScale(ExtentHelper.GetScale(mapPrinterLayer.MapExtent, (float)mapPrinterLayer.GetBoundingBox().Width, mapPrinterLayer.MapUnit), zoomLevelSet);  
             mapPrinterLayer.MapExtent = ExtentHelper.ZoomToScale(newScale, mapPrinterLayer.MapExtent, mapPrinterLayer.MapUnit, (float)mapPrinterLayer.GetBoundingBox().Width, (float)mapPrinterLayer.GetBoundingBox().Height);  
 
             printerInteractiveOverlay.Redraw();  
         }  
 
         protected void btnPan_Click(object sender, EventArgs e)  
         {  
             LayerOverlay printerInteractiveOverlay = GetPageOverlay();  
 
             MapPrinterLayer mapPrinterLayer = ((MapPrinterLayer)(printerInteractiveOverlay.Layers["mapPrinterLayer"]));  
 
             if (sender == btnPanNorth)  
             { mapPrinterLayer.MapExtent = ExtentHelper.Pan(mapPrinterLayer.MapExtent, PanDirection.Up, 30); }  
             else if (sender == btnPanWest)  
             { mapPrinterLayer.MapExtent = ExtentHelper.Pan(mapPrinterLayer.MapExtent, PanDirection.Left, 30); }  
             else if (sender == btnPanEast)  
             { mapPrinterLayer.MapExtent = ExtentHelper.Pan(mapPrinterLayer.MapExtent, PanDirection.Right, 30); }  
             else if (sender == btnPanSouth)  
             { mapPrinterLayer.MapExtent = ExtentHelper.Pan(mapPrinterLayer.MapExtent, PanDirection.Down, 30); }  
 
             printerInteractiveOverlay.Redraw();  
         }  
 
         #endregion  
 
         #region Combo Boxes & ContextMenu  
 
         protected void lisSize_SelectedIndexChanged(object sender, EventArgs e)  
         {  
             LayerOverlay printerInteractiveOverlay = GetPageOverlay();  
             PagePrinterLayer pagePrinterLayer = (PagePrinterLayer)printerInteractiveOverlay.Layers["PageLayer"];  
 
             string selectText = lisSize.SelectedItem.Text;  
             if (selectText.StartsWith("ANSI A"))  
                 pagePrinterLayer.PageSize = PrinterPageSize.AnsiA;  
             else if (selectText.StartsWith("ANSI B"))  
                 pagePrinterLayer.PageSize = PrinterPageSize.AnsiB;  
             else if (selectText.StartsWith("ANSI C"))  
                 pagePrinterLayer.PageSize = PrinterPageSize.AnsiC;  
             else if (selectText.StartsWith("ANSI D"))  
                 pagePrinterLayer.PageSize = PrinterPageSize.AnsiD;  
             else if (selectText.StartsWith("ANSI E"))  
                 pagePrinterLayer.PageSize = PrinterPageSize.AnsiE;  
 
             printerInteractiveOverlay.Redraw();  
         }  
 
         protected void lisOrientation_SelectedIndexChanged(object sender, EventArgs e)  
         {  
             LayerOverlay printerInteractiveOverlay = GetPageOverlay();  
             PagePrinterLayer pagePrinterLayer = (PagePrinterLayer)printerInteractiveOverlay.Layers["PageLayer"];  
 
             string selectText = lisOrientation.SelectedItem.Text;  
             if (selectText.ToUpper() == "LANDSCAPE")  
             {  
                 pagePrinterLayer.Orientation = PrinterOrientation.Landscape;  
             }  
             else if (selectText.ToUpper() == "PORTRAIT")  
             {  
                 pagePrinterLayer.Orientation = PrinterOrientation.Portrait;  
             }  
 
             printerInteractiveOverlay.Redraw();  
         }  
 
         protected void lisPercentage_SelectedIndexChanged(object sender, EventArgs e)  
         {  
             String zoomString = lisPercentage.SelectedItem.Text;  
             double currentZoom = Double.Parse(zoomString.Replace("%", ""));  
             Map1.CurrentScale = PrinterHelper.GetPointsPerGeographyUnit(Map1.MapUnit) / (currentZoom / 100);  
 
             LayerOverlay printerInteractiveOverlay = GetPageOverlay();  
             printerInteractiveOverlay.Redraw();  
         }  
 
         #endregion  
 
         #region ToolBox  
 
         protected void btnAddContrl_Click(object sender, ImageClickEventArgs e)  
         {  
             ImageButton btn = sender as ImageButton;  
             if (btn == btnAddLabel)  
             {  
                 AddLabelLayer();  
             }  
             else if (btn == btnAddImage)  
             {  
                 AddLogoImage();  
             }  
             else if (btn == btnAddScaleLine)  
             {  
                 AddScaleLineLayer();  
             }  
             else if (btn == btnAddScaleBar)  
             {  
                 string script = @"alert('Not Implemented!');";  
                 ScriptManager.RegisterStartupScript(this, this.GetType(), "alertForm", script, true);  
             }  
             else if (btn == btnAddGrid)  
             {  
                 AddGridLayer();  
             }  
             LayerOverlay printerInteractiveOverlay = GetPageOverlay();  
             printerInteractiveOverlay.Redraw();  
         }  
 
         #endregion  
     }  
 }  
 

Sample.aspx.designer.cs

 //------------------------------------------------------------------------------  
 // <auto-generated>  
 //     This code was generated by a tool.  
 //  
 //     Changes to this file may cause incorrect behavior and will be lost if  
 //     the code is regenerated.  
 // </auto-generated>  
 //------------------------------------------------------------------------------  
 
 namespace CSSamples.Samples {  
 
 
     public partial class Sample {  
 
         /// <summary>  
         /// Head1 control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.HtmlControls.HtmlHead Head1;  
 
         /// <summary>  
         /// form1 control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.HtmlControls.HtmlForm form1;  
 
         /// <summary>  
         /// Header1 control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::Banner Header1;  
 
         /// <summary>  
         /// ControlLabel control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.Label ControlLabel;  
 
         /// <summary>  
         /// ControlDescription control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.Label ControlDescription;  
 
         /// <summary>  
         /// labPageSize control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.Label labPageSize;  
 
         /// <summary>  
         /// lisSize control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.DropDownList lisSize;  
 
         /// <summary>  
         /// labOrentation control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.Label labOrentation;  
 
         /// <summary>  
         /// lisOrientation control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.DropDownList lisOrientation;  
 
         /// <summary>  
         /// labPercentage control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.Label labPercentage;  
 
         /// <summary>  
         /// lisPercentage control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.DropDownList lisPercentage;  
 
         /// <summary>  
         /// labExport control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.Label labExport;  
 
         /// <summary>  
         /// btnToBitmap control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.Button btnToBitmap;  
 
         /// <summary>  
         /// btnToPDF control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.Button btnToPDF;  
 
         /// <summary>  
         /// btnToPrinter control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.Button btnToPrinter;  
 
         /// <summary>  
         /// labPan control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.Label labPan;  
 
         /// <summary>  
         /// btnZoomIn control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.Button btnZoomIn;  
 
         /// <summary>  
         /// btnZoomOut control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.Button btnZoomOut;  
 
         /// <summary>  
         /// btnPanNorth control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.Button btnPanNorth;  
 
         /// <summary>  
         /// btnPanWest control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.Button btnPanWest;  
 
         /// <summary>  
         /// btnPanEast control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.Button btnPanEast;  
 
         /// <summary>  
         /// btnPanSouth control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.Button btnPanSouth;  
 
         /// <summary>  
         /// AddToolsLabel control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.Label AddToolsLabel;  
 
         /// <summary>  
         /// ToolDescription control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.Label ToolDescription;  
 
         /// <summary>  
         /// btnAddLabel control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.ImageButton btnAddLabel;  
 
         /// <summary>  
         /// btnAddImage control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.ImageButton btnAddImage;  
 
         /// <summary>  
         /// btnAddScaleLine control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.ImageButton btnAddScaleLine;  
 
         /// <summary>  
         /// btnAddScaleBar control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.ImageButton btnAddScaleBar;  
 
         /// <summary>  
         /// btnAddGrid control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.WebControls.ImageButton btnAddGrid;  
 
         /// <summary>  
         /// ScriptManager1 control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.ScriptManager ScriptManager1;  
 
         /// <summary>  
         /// UpdatePanel1 control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::System.Web.UI.UpdatePanel UpdatePanel1;  
 
         /// <summary>  
         /// Map1 control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::ThinkGeo.MapSuite.WebEdition.Map Map1;  
 
         /// <summary>  
         /// Footer1 control.  
         /// </summary>  
         /// <remarks>  
         /// Auto-generated field.  
         /// To modify move field declaration from designer file to code-behind file.  
         /// </remarks>  
         protected global::Footer Footer1;  
     }  
 }  
 

Footer.xaml.cs

 using System;  
 using System.Windows.Controls;  
 using System.Windows.Input;  
 using System.Windows.Media.Imaging;  
 
 namespace LargeScaleMapPrinting  
 {  
     /// <summary>  
     /// Interaction logic for SampleFooter.xaml  
     /// </summary>  
     public partial class Footer : UserControl  
     {  
         public Footer()  
         {  
             InitializeComponent();  
         }  
 
         private void Products_MouseDown(object sender, MouseButtonEventArgs e)  
         {  
             System.Diagnostics.Process.Start("http://gis.thinkgeo.com/Default.aspx?tabid=802");  
         }  
 
         private void Products_MouseEnter(object sender, MouseEventArgs e)  
         {  
             Product.Source = new BitmapImage(new Uri("/Resources/btn_active_map_suite_products.png", UriKind.RelativeOrAbsolute));  
         }  
 
         private void Products_MouseLeave(object sender, MouseEventArgs e)  
         {  
             Product.Source = new BitmapImage(new Uri("/Resources/btn_inactive_map_suite_products.png", UriKind.RelativeOrAbsolute));  
         }  
 
         private void Support_MouseDown(object sender, MouseButtonEventArgs e)  
         {  
             System.Diagnostics.Process.Start("http://gis.thinkgeo.com/supportcenter");  
         }  
 
         private void Support_MouseEnter(object sender, MouseEventArgs e)  
         {  
             Support.Source = new BitmapImage(new Uri("/Resources/btn_active_support_center.png", UriKind.RelativeOrAbsolute));  
         }  
 
         private void Support_MouseLeave(object sender, MouseEventArgs e)  
         {  
             Support.Source = new BitmapImage(new Uri("/Resources/btn_inactive_support_center.png", UriKind.RelativeOrAbsolute));  
         }  
 
         private void Discussion_MouseDown(object sender, MouseButtonEventArgs e)  
         {  
             System.Diagnostics.Process.Start("http://gis.thinkgeo.com/Support/DiscussionForums/tabid/143/afv/topicsview/aff/39/Default.aspx");  
         }  
 
         private void Discussion_MouseEnter(object sender, MouseEventArgs e)  
         {  
             Discussion.Source = new BitmapImage(new Uri("/Resources/btn_active_discussion_forums.png", UriKind.RelativeOrAbsolute));  
         }  
 
         private void Discussion_MouseLeave(object sender, MouseEventArgs e)  
         {  
             Discussion.Source = new BitmapImage(new Uri("/Resources/btn_inactive_discussion_forums.png", UriKind.RelativeOrAbsolute));  
         }  
 
         private void Wiki_MouseDown(object sender, MouseButtonEventArgs e)  
         {  
             System.Diagnostics.Process.Start("http://wiki.thinkgeo.com/wiki/Map_Suite_Wpf_Desktop_Edition");  
         }  
 
         private void Wiki_MouseEnter(object sender, MouseEventArgs e)  
         {  
             Wiki.Source = new BitmapImage(new Uri("/Resources/btn_active_thinkgeo_wiki.png", UriKind.RelativeOrAbsolute));  
         }  
 
         private void Wiki_MouseLeave(object sender, MouseEventArgs e)  
         {  
             Wiki.Source = new BitmapImage(new Uri("/Resources/btn_inactive_thinkgeo_wiki.png", UriKind.RelativeOrAbsolute));  
         }  
 
         private void Contact_MouseDown(object sender, MouseButtonEventArgs e)  
         {  
             System.Diagnostics.Process.Start("http://gis.thinkgeo.com/Default.aspx?tabid=147");  
         }  
 
         private void Contact_MouseEnter(object sender, MouseEventArgs e)  
         {  
             Contact.Source = new BitmapImage(new Uri("/Resources/btn_active_contact_us.png", UriKind.RelativeOrAbsolute));  
         }  
 
         private void Contact_MouseLeave(object sender, MouseEventArgs e)  
         {  
             Contact.Source = new BitmapImage(new Uri("/Resources/btn_inactive_contact_us.png", UriKind.RelativeOrAbsolute));  
         }  
     }  
 }  
 

Helper.cs

 using System.Drawing;  
 using ThinkGeo.MapSuite.Core;  
 
 namespace LargeScaleMapPrinting  
 {  
     public static class Helper  
     {  
         public static Font GetFont(GeoFont geoFont)  
         {  
             FontStyle style = FontStyle.Regular;  
             switch (geoFont.Style)  
             {  
                 case DrawingFontStyles.Regular:  
                     style = FontStyle.Regular;  
                     break;  
                 case DrawingFontStyles.Bold:  
                     style = FontStyle.Bold;  
                     break;  
                 case DrawingFontStyles.Italic:  
                     style = FontStyle.Italic;  
                     break;  
                 case DrawingFontStyles.Underline:  
                     style = FontStyle.Underline;  
                     break;  
                 case DrawingFontStyles.Strikeout:  
                     style = FontStyle.Strikeout;  
                     break;  
                 default:  
                     break;  
             }  
 
 
             Font font = new Font(geoFont.FontName, geoFont.Size, style);  
 
             return font;  
         }  
 
         public static GeoFont GetGeoFont(Font font)  
         {  
             DrawingFontStyles style = DrawingFontStyles.Regular;  
             switch (font.Style)  
             {  
                 case FontStyle.Bold:  
                     style = DrawingFontStyles.Bold;  
                     break;  
                 case FontStyle.Italic:  
                     style = DrawingFontStyles.Italic;  
                     break;  
                 case FontStyle.Regular:  
                     style = DrawingFontStyles.Regular;  
                     break;  
                 case FontStyle.Strikeout:  
                     style = DrawingFontStyles.Strikeout;  
                     break;  
                 case FontStyle.Underline:  
                     style = DrawingFontStyles.Underline;  
                     break;  
                 default:  
                     break;  
             }  
 
             return new GeoFont(font.FontFamily.Name, font.Size, style);  
         }  
 
         public static Color GetColor(GeoColor geoColor)  
         {  
             return Color.FromArgb(geoColor.AlphaComponent, geoColor.RedComponent, geoColor.GreenComponent, geoColor.BlueComponent);  
         }  
 
         public static GeoColor GetGeoColor(Color color)  
         {  
             return GeoColor.FromArgb(color.A, color.R, color.G, color.B);  
         }  
     }  
 }  
 

ImagePrinterLayerProperty.xaml.cs

 using System.Windows;  
 using ThinkGeo.MapSuite.Core;  
 
 namespace LargeScaleMapPrinting  
 {  
     /// <summary>  
     /// Interaction logic for ImagePrinterLayerProperty.xaml  
     /// </summary>  
     public partial class ImagePrinterLayerProperty : Window  
     {  
         ImagePrinterLayer imagePrinterLayer = null;  
 
         public ImagePrinterLayerProperty(ImagePrinterLayer imagePrinterLayer)  
         {  
             InitializeComponent();  
 
             this.imagePrinterLayer = imagePrinterLayer;  
         }  
 
         private void Window_Loaded(object sender, RoutedEventArgs e)  
         {  
             LoadLayerProperties();  
             LoadResize();  
             LoadDrag();  
 
         }  
 
         private void btnOk_Click(object sender, RoutedEventArgs e)  
         {  
             SetLayerProperties();  
             SetResize();  
             SetDrag();  
 
             DialogResult = true;  
             Close();  
         }  
 
         private void LoadLayerProperties()  
         {  
             txtPath.Text = imagePrinterLayer.Image.PathFilename;  
         }  
 
         private void SetLayerProperties()  
         {  
             GeoImage image = new GeoImage(txtPath.Text);  
             imagePrinterLayer.Image = image;  
 
             imagePrinterLayer.Open();  
             PointShape centerPoint = imagePrinterLayer.GetPosition().GetCenterPoint();  
             imagePrinterLayer.SetPosition(image.GetWidth(), image.GetHeight(), centerPoint, PrintingUnit.Point);  
         }  
 
         private void LoadResize()  
         {  
             switch (imagePrinterLayer.ResizeMode)  
             {  
                 case PrinterResizeMode.Fixed:  
                     rbtnResizeFixed.IsChecked = true;  
                     break;  
                 case PrinterResizeMode.MaintainAspectRatio:  
                     rbtnResizeMaintainRaio.IsChecked = true;  
                     break;  
                 case PrinterResizeMode.Resizable:  
                     rbtnReshape .IsChecked = true;  
                     break;  
                 default:  
                     break;  
             }  
         }  
 
         private void SetResize()  
         {  
             if (rbtnReshape .IsChecked == true)  
             {  
                 imagePrinterLayer.ResizeMode = PrinterResizeMode.Resizable;  
             }  
             else if (rbtnResizeFixed.IsChecked == true)  
             {  
                 imagePrinterLayer.ResizeMode = PrinterResizeMode.Fixed;  
             }  
             else if (rbtnResizeMaintainRaio.IsChecked == true)  
             {  
                 imagePrinterLayer.ResizeMode = PrinterResizeMode.MaintainAspectRatio;  
             }  
         }  
 
         private void LoadDrag()  
         {  
             switch (imagePrinterLayer.DragMode)  
             {  
                 case PrinterDragMode.Fixed:  
                     rbtnDragFixed.IsChecked = true;  
                     break;  
                 case PrinterDragMode.Dragable:  
                     rbtnDraggable.IsChecked = true;  
                     break;  
                 default:  
                     break;  
             }  
         }  
 
         private void SetDrag()  
         {  
             if (rbtnDragFixed.IsChecked == true)  
             {  
                 imagePrinterLayer.DragMode = PrinterDragMode.Fixed;  
             }  
             else if (rbtnDraggable.IsChecked == true)  
             {  
                 imagePrinterLayer.DragMode = PrinterDragMode.Dragable;  
             }  
         }  
 
         private void btnBrowse_Click(object sender, RoutedEventArgs e)  
         {  
             Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();  
             dlg.FileName = ""; // Default file name  
             dlg.DefaultExt = ".*"; // Default file extension  
             dlg.Filter = "All files (*.*)|*.*"; // Filter files by extension  
             dlg.RestoreDirectory = true;  
 
             if (dlg.ShowDialog() == true)  
             {  
                 txtPath.Text = dlg.FileName;  
             }  
         }  
 
 
     }  
 }  
 

LabelPrinterLayerProperty.xaml.cs

 using System.Windows;  
 using System.Windows.Controls;  
 using System.Windows.Media;  
 using ThinkGeo.MapSuite.Core;  
 
 namespace LargeScaleMapPrinting  
 {  
     /// <summary>  
     /// Interaction logic for LabelPrinterLayerProperty.xaml  
     /// </summary>  
     public partial class LabelPrinterLayerProperty : Window  
     {  
         LabelPrinterLayer labelPrinterLayer = null;  
 
         public LabelPrinterLayerProperty(LabelPrinterLayer labelPrinterLayer)  
         {  
             InitializeComponent();  
 
             this.labelPrinterLayer = labelPrinterLayer;  
         }  
 
         private void Window_Loaded(object sender, RoutedEventArgs e)  
         {  
             LoadLayerProperties();  
             LoadResize();  
             LoadDrag();  
         }  
 
         private void btnOk_Click(object sender, RoutedEventArgs e)  
         {  
             SetLayerProperties();  
             SetResize();  
             SetDrag();  
 
             DialogResult = true;  
             Close();  
         }  
 
         private void LoadLayerProperties()  
         {  
             txtText.Text = labelPrinterLayer.Text;  
             lbFontSample.FontSize = labelPrinterLayer.Font.Size;  
             bool knownSize = false;  
             for (int i = 0; i < cbxFontSize.Items.Count; i++)  
             {  
                 if (labelPrinterLayer.Font.Size.ToString() == ((ComboBoxItem)cbxFontSize.Items[i]).Content.ToString())  
                 {  
                     cbxFontSize.SelectedIndex = i;  
                     knownSize = true;  
                     break;  
                 }  
             }  
             // If the current size is not in the list, add one  
             if (!knownSize)  
             {  
                 ComboBoxItem item = new ComboBoxItem();  
                 item.Content = labelPrinterLayer.Font.Size;  
                 cbxFontSize.Items.Add(item);  
                 cbxFontSize.SelectedIndex = cbxFontSize.Items.Count - 1;  
             }  
 
             bool knownFontName = false;  
             lbFontSample.FontFamily = new FontFamily(labelPrinterLayer.Font.FontName);  
             for (int i = 0; i < cbxFontName.Items.Count; i++)  
             {  
                 if (labelPrinterLayer.Font.FontName.ToString() == ((ComboBoxItem)cbxFontName.Items[i]).Content.ToString())  
                 {  
                     cbxFontName.SelectedIndex = i;  
                     knownFontName = true;  
                     break;  
                 }  
             }  
             // If the current font name is not in the list, add one  
             if (!knownFontName)  
             {  
                 ComboBoxItem item = new ComboBoxItem();  
                 item.Content = labelPrinterLayer.Font.FontName;  
                 cbxFontName.Items.Add(item);  
                 cbxFontName.SelectedIndex = cbxFontName.Items.Count - 1;  
             }  
 
             if (labelPrinterLayer.PrinterWrapMode == PrinterWrapMode.WrapText)  
             {  
                 chkEnableWrapText.IsChecked = true;  
             }  
             else  
             {  
                 chkEnableWrapText.IsChecked = false;  
             }  
         }  
 
         private void SetLayerProperties()  
         {  
             labelPrinterLayer.Text = txtText.Text;  
             string fontName = cbxFontName.Text;  
             float fontSize = float.Parse(cbxFontSize.Text);  
             labelPrinterLayer.Font = new GeoFont(fontName, fontSize);  
 
             if (chkEnableWrapText.IsChecked == true)  
             {  
                 labelPrinterLayer.PrinterWrapMode = PrinterWrapMode.WrapText;  
             }  
             else  
             {  
                 labelPrinterLayer.PrinterWrapMode = PrinterWrapMode.AutoSizeText;  
             }  
         }  
 
         private void Font_SelectionChanged(object sender, SelectionChangedEventArgs e)  
         {  
             if (IsLoaded)  
             {  
                 if (e.AddedItems.Count > 0)  
                 {  
                     if (sender == cbxFontName)  
                     {  
                         lbFontSample.FontFamily = new FontFamily(((ComboBoxItem)e.AddedItems[0]).Content.ToString());  
                     }  
                     if (sender == cbxFontSize)  
                     {  
                         lbFontSample.FontSize = double.Parse(((ComboBoxItem)e.AddedItems[0]).Content.ToString());  
                     }  
                 }  
                 else  
                 {  
                     if (sender == cbxFontName)  
                     {  
                         lbFontSample.FontFamily = new FontFamily(cbxFontName.Text);  
                     }  
                     if (sender == cbxFontSize)  
                     {  
                         lbFontSample.FontSize = double.Parse(cbxFontSize.Text);  
                     }  
                 }  
 
             }  
         }  
 
         private void LoadResize()  
         {  
             switch (labelPrinterLayer.ResizeMode)  
             {  
                 case PrinterResizeMode.Fixed:  
                     rbtnResizeFixed.IsChecked = true;  
                     break;  
                 case PrinterResizeMode.MaintainAspectRatio:  
                     rbtnResizeMaintainRaio.IsChecked = true;  
                     break;  
                 case PrinterResizeMode.Resizable:  
                     rbtnReshape.IsChecked = true;  
                     break;  
                 default:  
                     break;  
             }  
         }  
 
         private void SetResize()  
         {  
             if (rbtnReshape.IsChecked == true)  
             {  
                 labelPrinterLayer.ResizeMode = PrinterResizeMode.Resizable;  
             }  
             else if (rbtnResizeFixed.IsChecked == true)  
             {  
                 labelPrinterLayer.ResizeMode = PrinterResizeMode.Fixed;  
             }  
             else if (rbtnResizeMaintainRaio.IsChecked == true)  
             {  
                 labelPrinterLayer.ResizeMode = PrinterResizeMode.MaintainAspectRatio;  
             }  
         }  
 
         private void LoadDrag()  
         {  
             switch (labelPrinterLayer.DragMode)  
             {  
                 case PrinterDragMode.Fixed:  
                     rbtnDragFixed.IsChecked = true;  
                     break;  
                 case PrinterDragMode.Dragable:  
                     rbtnDraggable.IsChecked = true;  
                     break;  
                 default:  
                     break;  
             }  
         }  
 
         private void SetDrag()  
         {  
             if (rbtnDragFixed.IsChecked == true)  
             {  
                 labelPrinterLayer.DragMode = PrinterDragMode.Fixed;  
             }  
             else if (rbtnDraggable.IsChecked == true)  
             {  
                 labelPrinterLayer.DragMode = PrinterDragMode.Dragable;  
             }  
         }  
 
 
     }  
 }  
 

MapPrinterLayerProperty.xaml.cs

 using System.Windows;  
 using ThinkGeo.MapSuite.Core;  
 
 namespace LargeScaleMapPrinting  
 {  
     /// <summary>  
     /// Interaction logic for MapPrinterLayerProperty.xaml  
     /// </summary>  
     public partial class MapPrinterLayerProperty : Window  
     {  
         MapPrinterLayer mapPrinterLayer = null;  
         bool isEditing = false;  
 
         public MapPrinterLayerProperty(MapPrinterLayer mapPrinterLayer)  
         {  
             InitializeComponent();  
 
             this.mapPrinterLayer = mapPrinterLayer;  
         }  
 
         private void Window_Loaded(object sender, RoutedEventArgs e)  
         {  
             LoadLayerProperties();  
             LoadResize();  
             LoadDrag();  
         }  
 
         private void btnOk_Click(object sender, RoutedEventArgs e)  
         {  
             SetLayerProperties();  
             SetResize();  
             SetDrag();  
 
             DialogResult = true;  
             Close();  
         }  
 
         private void LoadLayerProperties()  
         {  
             if (mapPrinterLayer.Layers.Count > 0  
                 && mapPrinterLayer.Layers[0].GetType() == typeof(ShapeFileFeatureLayer))  
             {  
                 txtPath.Text = ((ShapeFileFeatureLayer)mapPrinterLayer.Layers[0]).ShapePathFileName;  
                 isEditing = true;  
             }  
 
             if (isEditing)  
             {  
                 txtPath.IsEnabled = false;  
                 btnBrowse.IsEnabled = false;  
             }  
         }  
 
         private void SetLayerProperties()  
         {  
             ShapeFileFeatureLayer shapeLayer = new ShapeFileFeatureLayer(txtPath.Text);  
             shapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
             shapeLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;  
             shapeLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = new LineStyle(new GeoPen(GeoColor.SimpleColors.Black, 1));  
             shapeLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.Capital1;  
             shapeLayer.Open();  
 
             if (isEditing)  
             {  
                 mapPrinterLayer.Layers.RemoveAt(0);  
             }  
             else  
             {  
                 mapPrinterLayer.SetPosition(500, 500, 0, 0, PrintingUnit.Point);  
                 mapPrinterLayer.MapExtent = shapeLayer.GetBoundingBox();  
             }  
             mapPrinterLayer.Layers.Add(shapeLayer);  
         }  
 
         private void LoadResize()  
         {  
             switch (mapPrinterLayer.ResizeMode)  
             {  
                 case PrinterResizeMode.Fixed:  
                     rbtnResizeFixed.IsChecked = true;  
                     break;  
                 case PrinterResizeMode.MaintainAspectRatio:  
                     rbtnResizeMaintainRaio.IsChecked = true;  
                     break;  
                 case PrinterResizeMode.Resizable:  
                     rbtnReshape.IsChecked = true;  
                     break;  
                 default:  
                     break;  
             }  
         }  
 
         private void SetResize()  
         {  
             if (rbtnReshape .IsChecked == true )  
             {  
                 mapPrinterLayer.ResizeMode = PrinterResizeMode.Resizable;  
             }  
             else if (rbtnResizeFixed.IsChecked == true )  
             {  
                 mapPrinterLayer.ResizeMode = PrinterResizeMode.Fixed;  
             }  
             else if (rbtnResizeMaintainRaio.IsChecked== true )  
             {  
                 mapPrinterLayer.ResizeMode = PrinterResizeMode.MaintainAspectRatio;  
             }  
         }  
 
         private void LoadDrag()  
         {  
             switch (mapPrinterLayer.DragMode)  
             {  
                 case PrinterDragMode.Fixed:  
                     rbtnDragFixed.IsChecked = true;  
                     break;  
                 case PrinterDragMode.Dragable:  
                     rbtnDraggable.IsChecked = true;  
                     break;  
                 default:  
                     break;  
             }  
         }  
 
         private void SetDrag()  
         {  
             if (rbtnDragFixed.IsChecked== true )  
             {  
                 mapPrinterLayer.DragMode = PrinterDragMode.Fixed;  
             }  
             else if (rbtnDraggable.IsChecked== true )  
             {  
                 mapPrinterLayer.DragMode = PrinterDragMode.Dragable;  
             }  
         }  
 
         private void btnBrowse_Click(object sender, RoutedEventArgs e)  
         {  
             Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();  
             dlg.FileName = ""; // Default file name  
             dlg.DefaultExt = ".*"; // Default file extension  
             dlg.Filter = "Shape files (*.shp)|*.shp";  
             dlg.RestoreDirectory = true;  
 
             if (dlg.ShowDialog() == true)  
             {  
                 txtPath.Text = dlg.FileName;  
             }  
         }  
     }  
 }  
 

Sample.xaml.cs

 using System;  
 using System.Collections.ObjectModel;  
 using System.Data;  
 using System.Diagnostics;  
 using System.Drawing;  
 using System.Drawing.Printing;  
 using System.Windows;  
 using System.Windows.Controls;  
 using PdfSharp;  
 using PdfSharp.Pdf;  
 using ThinkGeo.MapSuite.Core;  
 using ThinkGeo.MapSuite.WpfDesktopEdition;  
 
 namespace LargeScaleMapPrinting  
 {  
     public partial class Sample : Window  
     {  
         public Sample() { InitializeComponent(); }  
 
         #region Add PrinterLayer Elements  
 
         private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)  
         {  
             SetupMapWithBlankPage();  
 
             AddCenteredMapTitles();  
             AddMapLayer();  
 
             AddLogoImage();  
             AddScaleLineLayer();  
             AddLegendLayer1();  
             AddLegendLayer2();  
 
             AddGridTitle1();  
             AddDataGridLayer1();  
 
             AddGridTitle2();  
             AddDataGridLayer2();  
 
             SetupComboBoxes();  
             SetupContextMenu();  
 
             Map1.Refresh();  
         }  
 
         private void SetupMapWithBlankPage()  
         {  
             // Setup the map unit, you want to always use feet or meters for the printer layout map.  
             Map1.MapUnit = GeographyUnit.Meter;  
 
             // Here we create the default zoom levels for the sample.  We have pre-created a PrinterZoomLevelSet  
             // That pre-defines commonly used zoom levels based on percentages of zoom  
             Map1.ZoomLevelSet = new PrinterZoomLevelSet(Map1.MapUnit, PrinterHelper.GetPointsPerGeographyUnit(Map1.MapUnit));  
 
             // Here we set the background color to gray so there is contrast with the white page  
             Map1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.StandardColors.LightGray);  
 
             // Create the PrinterInteractiveOverlay to contain all of the PrinterLayers.  
             // The interactive overlay allows the layers to be interacted with  
             PrinterInteractiveOverlay printerOverlay = new PrinterInteractiveOverlay();  
 
             Map1.InteractiveOverlays.Add("PrintPreviewOverlay", printerOverlay);  
             Map1.InteractiveOverlays.MoveToBottom("PrintPreviewOverlay");  
 
             // Create the PagePrinterLayer which shows the page boundary and is the area the user will  
             // arrange all of the other layer on top of.  
             PagePrinterLayer pagePrinterLayer = new PagePrinterLayer(PrinterPageSize.AnsiA, PrinterOrientation.Portrait);  
             pagePrinterLayer.Open();  
             printerOverlay.PrinterLayers.Add("PageLayer", pagePrinterLayer);  
 
             // Get the pages extent, slightly scale it up, and then set that as the default current extent  
             Map1.CurrentExtent = RectangleShape.ScaleUp(pagePrinterLayer.GetPosition(), 10).GetBoundingBox();  
 
             // Set the minimum sscale of the map to the last zoom level  
             Map1.MinimumScale = Map1.ZoomLevelSet.ZoomLevel20.Scale;  
         }  
 
         private void AddCenteredMapTitles()  
         {  
             RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);  
 
             //For the main title  
             LabelPrinterLayer titleLabelPrinterLayer = new LabelPrinterLayer();  
             //Setup the text and the font..  
             titleLabelPrinterLayer.Text = "Tarrant County Parcels";  
             titleLabelPrinterLayer.Font = new GeoFont("Arial", 8, DrawingFontStyles.Bold);  
             titleLabelPrinterLayer.TextBrush = new GeoSolidBrush(GeoColor.StandardColors.Black);  
 
             // Set the title position so that is it centered on the page.  
             PointShape titleCenterPointShape = new PointShape();  
             titleCenterPointShape.X = pageBoundingbox.UpperRightPoint.X - pageBoundingbox.Width / 2;  
             titleCenterPointShape.Y = pageBoundingbox.UpperLeftPoint.Y - 0.3;  
             titleLabelPrinterLayer.PrinterWrapMode = PrinterWrapMode.AutoSizeText;  
             titleLabelPrinterLayer.SetPosition(3, 0.5, titleCenterPointShape, PrintingUnit.Inch);  
 
             //For the subtitle  
             LabelPrinterLayer subTitleLabelPrinterLayer = new LabelPrinterLayer();  
             //Setup the text and the font..  
             subTitleLabelPrinterLayer.Text = "Affected Parcels By New Proposal";  
             subTitleLabelPrinterLayer.Font = new GeoFont("Arial", 2, DrawingFontStyles.Bold);  
             subTitleLabelPrinterLayer.TextBrush = new GeoSolidBrush(GeoColor.StandardColors.Black);  
 
             // Set the sub title position so that is it centered on the page below the title.  
             PointShape subtitleCenterPointShape = new PointShape();  
             subtitleCenterPointShape.X = pageBoundingbox.UpperRightPoint.X - pageBoundingbox.Width / 2;  
             subtitleCenterPointShape.Y = pageBoundingbox.UpperLeftPoint.Y - 0.6;  
             subTitleLabelPrinterLayer.PrinterWrapMode = PrinterWrapMode.AutoSizeText;  
             subTitleLabelPrinterLayer.SetPosition(3, 0.3, subtitleCenterPointShape, PrintingUnit.Inch);  
 
             // Find the PrinterInteractiveOverlay so we can add the new LabelPrinterLayer  
             PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
             printerInteractiveOverlay.PrinterLayers.Add("titleLabelPrinterLayer", titleLabelPrinterLayer);  
             printerInteractiveOverlay.PrinterLayers.Add("subtitleLabelPrinterLayer", subTitleLabelPrinterLayer);  
 
         }  
 
         private void AddMapLayer()  
         {  
             // Create the MapPrinterLayer and set the position  
             MapPrinterLayer mapPrinterLayer = new MapPrinterLayer();  
             //Map Printer Layer is in feet (State Plane Texas North Central Feet NAD83)  
             mapPrinterLayer.MapUnit = GeographyUnit.Feet;  
             //Set the extent of the MapPrinterLayer with world coordinates.  
             RectangleShape currentExtent = new RectangleShape(2276456,6897886,2280391,6895437);  
             mapPrinterLayer.MapExtent = currentExtent;  
             mapPrinterLayer.BackgroundMask = new AreaStyle(new GeoPen(GeoColor.StandardColors.Black, 1));  
             mapPrinterLayer.Open();  
 
             // Set the maps position slightly above the page center and 8 inches wide and 7 inches tall  
             RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);  
             mapPrinterLayer.SetPosition(8, 7, pageBoundingbox.GetCenterPoint().X, pageBoundingbox.GetCenterPoint().Y + 1, PrintingUnit.Inch);  
 
            //Setup the styles for the parcels layer.  
             ShapeFileFeatureLayer parcelsLayer = new ShapeFileFeatureLayer(@"..\..\Data\parcels.shp", ShapeFileReadWriteMode.ReadOnly);  
             //Creates a value style for the parcel type (residential 1, commercial 2, industrial 3).  
             ValueStyle typeValueStyle = new ValueStyle();  
             typeValueStyle.ColumnName = "PARCELTYPE";  
             typeValueStyle.ValueItems.Add(new ValueItem("1", new AreaStyle(new GeoPen(GeoColor.StandardColors.Black), new GeoSolidBrush(GeoColor.StandardColors.LightGreen))));  
             typeValueStyle.ValueItems.Add(new ValueItem("2", new AreaStyle(new GeoPen(GeoColor.StandardColors.Black), new GeoSolidBrush(GeoColor.StandardColors.LightPink))));  
             typeValueStyle.ValueItems.Add(new ValueItem("3", new AreaStyle(new GeoPen(GeoColor.StandardColors.Black), new GeoSolidBrush(GeoColor.StandardColors.LightBlue))));  
             parcelsLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(typeValueStyle);  
 
             //Creates a value style for affected parcels by new proposal  
             ValueStyle affectedValueStyle = new ValueStyle();  
             affectedValueStyle.ColumnName = "AFFECTED";  
             affectedValueStyle.ValueItems.Add(new ValueItem("YES", new AreaStyle(new GeoPen(GeoColor.StandardColors.Red,4), new GeoSolidBrush(GeoColor.StandardColors.Transparent))));  
             affectedValueStyle.ValueItems.Add(new ValueItem("D", new AreaStyle(new GeoPen(GeoColor.StandardColors.Orange, 4), new GeoSolidBrush(GeoColor.StandardColors.Transparent))));  
             parcelsLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(affectedValueStyle);  
 
             //Creates a text style to display tax id of parcels  
             TextStyle textStyle = new TextStyle("TAXPIN", new GeoFont("Arial", 12, DrawingFontStyles.Bold),new GeoSolidBrush(GeoColor.StandardColors.Black));  
             textStyle.HaloPen = new GeoPen(GeoColor.StandardColors.White, 2);  
             parcelsLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(textStyle);  
             parcelsLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
 
             // Add the new parcels layer to the MapPrinterLayer  
             mapPrinterLayer.Layers.Add(parcelsLayer);  
 
             // Add the MapPrinterLayer to the PrinterInteractiveOverlay  
             PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
             printerInteractiveOverlay.PrinterLayers.Add("MapLayer", mapPrinterLayer);  
         }  
 
         private void AddLegendLayer1()  
         {  
             //Set the legend for the parcel type on top of the map in the upper left corner.  
             LegendItem titleLegendItem = new LegendItem();  
             titleLegendItem.TextStyle = new TextStyle("Parcel Types", new GeoFont("Arial", 10, DrawingFontStyles.Bold), new GeoSolidBrush(GeoColor.SimpleColors.Black));  
 
             LegendItem legendItem1 = new LegendItem();  
             legendItem1.ImageStyle =  new AreaStyle(new GeoPen(GeoColor.StandardColors.Black), new GeoSolidBrush(GeoColor.StandardColors.LightGreen));  
             legendItem1.TextStyle = new TextStyle("Residential", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColor.SimpleColors.Black));  
 
             LegendItem legendItem2 = new LegendItem();  
             legendItem2.ImageStyle = new AreaStyle(new GeoPen(GeoColor.StandardColors.Black), new GeoSolidBrush(GeoColor.StandardColors.LightPink));  
             legendItem2.TextStyle = new TextStyle("Industrial", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColor.SimpleColors.Black));  
 
             LegendItem legendItem3 = new LegendItem();  
             legendItem3.ImageStyle = new AreaStyle(new GeoPen(GeoColor.StandardColors.Black), new GeoSolidBrush(GeoColor.StandardColors.LightBlue));  
             legendItem3.TextStyle = new TextStyle("Industrial", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColor.SimpleColors.Black));  
 
             LegendAdornmentLayer legendAdornmentLayer = new LegendAdornmentLayer();  
             legendAdornmentLayer.Height = 130;  
             legendAdornmentLayer.Width = 140;  
 
             legendAdornmentLayer.Title = titleLegendItem;  
             legendAdornmentLayer.LegendItems.Add(legendItem1);  
             legendAdornmentLayer.LegendItems.Add(legendItem2);  
             legendAdornmentLayer.LegendItems.Add(legendItem3);  
 
             LegendPrinterLayer legendPrinterLayer = new LegendPrinterLayer(legendAdornmentLayer);  
 
             legendPrinterLayer.SetPosition(2, 1, -2.9, 3.9, PrintingUnit.Inch);  
 
             PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
             printerInteractiveOverlay.PrinterLayers.Add("LegendPrinterLayer1", legendPrinterLayer);  
         }  
 
         private void AddLegendLayer2()  
         {  
             //Set the legend for the new proposal on top of the map in the upper right corner.  
             LegendItem titleLegendItem = new LegendItem();  
             titleLegendItem.TextStyle = new TextStyle("New Proposal", new GeoFont("Arial", 10, DrawingFontStyles.Bold), new GeoSolidBrush(GeoColor.SimpleColors.Black));  
 
             LegendItem legendItem1 = new LegendItem();  
             legendItem1.ImageStyle = new AreaStyle(new GeoPen(GeoColor.StandardColors.Red,4), new GeoSolidBrush(GeoColor.StandardColors.Transparent));  
             legendItem1.TextStyle = new TextStyle("Approved", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColor.SimpleColors.Black));  
 
             LegendItem legendItem2 = new LegendItem();  
             legendItem2.ImageStyle = new AreaStyle(new GeoPen(GeoColor.StandardColors.Orange, 4), new GeoSolidBrush(GeoColor.StandardColors.Transparent));  
             legendItem2.TextStyle = new TextStyle("In Discussion", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColor.SimpleColors.Black));  
 
             LegendAdornmentLayer legendAdornmentLayer = new LegendAdornmentLayer();  
             legendAdornmentLayer.Height = 100;  
             legendAdornmentLayer.Width = 140;  
 
             legendAdornmentLayer.Title = titleLegendItem;  
             legendAdornmentLayer.LegendItems.Add(legendItem1);  
             legendAdornmentLayer.LegendItems.Add(legendItem2);  
 
             LegendPrinterLayer legendPrinterLayer = new LegendPrinterLayer(legendAdornmentLayer);  
 
             legendPrinterLayer.SetPosition(2, 1, 2.9, 3.9, PrintingUnit.Inch);  
 
             PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
             printerInteractiveOverlay.PrinterLayers.Add("LegendPrinterLayer2", legendPrinterLayer);  
         }  
 
         private void AddGridTitle1()  
         {  
             //Set the grid tile for approved parcels on top of the left grid.  
             RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);  
             //For the grid title  
             LabelPrinterLayer gridTitleLabelPrinterLayer = new LabelPrinterLayer();  
             //Setup the text and the font..  
             gridTitleLabelPrinterLayer.Text = "Approved Parcels";  
             gridTitleLabelPrinterLayer.Font = new GeoFont("Arial", 8, DrawingFontStyles.Bold);  
             gridTitleLabelPrinterLayer.TextBrush = new GeoSolidBrush(GeoColor.StandardColors.Black);  
 
             // Set the title position so that is it centered on the page one inch from the top and to the left  
             gridTitleLabelPrinterLayer.PrinterWrapMode = PrinterWrapMode.AutoSizeText;  
             gridTitleLabelPrinterLayer.SetPosition(3, 0.2, new PointShape(-2.25, pageBoundingbox.GetCenterPoint().Y - 2.9), PrintingUnit.Inch);  
 
             //Find the PrinterInteractiveOverlay so we can add the new LabelPrinterLayer  
             PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
             printerInteractiveOverlay.PrinterLayers.Add("gridtitle1LabelPrinterLayer", gridTitleLabelPrinterLayer);  
         }  
 
         private void AddDataGridLayer1()  
         {  
             // Create the DataGridPrinterLayer for Approved parcels and place it the left.  
             DataGridPrinterLayer dataGridPrinterLayer = new DataGridPrinterLayer();  
             dataGridPrinterLayer.TextFont = new GeoFont("Arial", 8);  
             dataGridPrinterLayer.TextHorizontalAlignment = TextHorizontalAlignment.Left;  
 
             // Set the data grid position 4.2 inches below the page center to the left and 3.5 inches wide and 2 inches tall  
             RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);  
             dataGridPrinterLayer.SetPosition(3.5, 2, -2.25, pageBoundingbox.GetCenterPoint().Y - 4.2, PrintingUnit.Inch);  
 
             //Create the data table and columns  
             dataGridPrinterLayer.DataTable = new DataTable();  
             dataGridPrinterLayer.DataTable.Columns.Add("TAXPIN");  
             dataGridPrinterLayer.DataTable.Columns.Add("LAST_REVIS");  
             dataGridPrinterLayer.DataTable.Columns.Add("ACRES");  
             dataGridPrinterLayer.DataTable.Columns.Add("CALCULATED");  
 
             // Find all of the parcels that are approved and add those items to the data table  
             ShapeFileFeatureLayer shapefileFeatureLayer = new ShapeFileFeatureLayer(@"..\..\Data\Parcels.shp", ShapeFileReadWriteMode.ReadOnly);  
             shapefileFeatureLayer.Open();  
             Collection<Feature> features = shapefileFeatureLayer.QueryTools.GetFeaturesByColumnValue("AFFECTED", "YES", ReturningColumnsType.AllColumns);  
             shapefileFeatureLayer.Close();  
 
             foreach (Feature feature in features)  
             {  
                 dataGridPrinterLayer.DataTable.Rows.Add(new object[4] { feature.ColumnValues["TAXPIN"], feature.ColumnValues["LAST_REVIS"], feature.ColumnValues["ACRES"], feature.ColumnValues["CALCULATED"] });  
             }  
 
             // Add the DataGridPrinterLayer to the PrinterInteractiveOverlay  
             PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
             printerInteractiveOverlay.PrinterLayers.Add("DataGridLayer1", dataGridPrinterLayer);  
         }  
 
         private void AddGridTitle2()  
         {  
             //Set the grid tile for approved parcels on top of the right grid.  
             RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);  
             //For the grid title  
             LabelPrinterLayer gridTitleLabelPrinterLayer = new LabelPrinterLayer();  
             //Setup the text and the font..  
             gridTitleLabelPrinterLayer.Text = "Parcels In Discussion";  
             gridTitleLabelPrinterLayer.Font = new GeoFont("Arial", 8, DrawingFontStyles.Bold);  
             gridTitleLabelPrinterLayer.TextBrush = new GeoSolidBrush(GeoColor.StandardColors.Black);  
 
             // Set the title position so that is it centered on the page one inch from the top and to the right  
             gridTitleLabelPrinterLayer.PrinterWrapMode = PrinterWrapMode.AutoSizeText;  
             gridTitleLabelPrinterLayer.SetPosition(3, 0.2, new PointShape(2.25, pageBoundingbox.GetCenterPoint().Y - 2.9), PrintingUnit.Inch);  
             //titleLabelPrinterLayer.SetPosition(  
 
             // Find the PrinterInteractiveOverlay so we can add the new LabelPrinterLayer  
             PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
             printerInteractiveOverlay.PrinterLayers.Add("gridtitle2LabelPrinterLayer", gridTitleLabelPrinterLayer);  
         }  
 
         private void AddDataGridLayer2()  
         {  
             // Create the DataGridPrinterLayer for parcels in discussion and place it the right.  
             DataGridPrinterLayer dataGridPrinterLayer = new DataGridPrinterLayer();  
             dataGridPrinterLayer.TextFont = new GeoFont("Arial", 8);  
             dataGridPrinterLayer.TextHorizontalAlignment = TextHorizontalAlignment.Left;  
 
             // Set the data grid position 4.2 inches below the page center to the right and 3.5 inches wide and 2 inches tall  
             RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);  
             dataGridPrinterLayer.SetPosition(3.5, 2, 2.25, pageBoundingbox.GetCenterPoint().Y - 4.2, PrintingUnit.Inch);  
 
             //Create the data table and columns  
             dataGridPrinterLayer.DataTable = new DataTable();  
             dataGridPrinterLayer.DataTable.Columns.Add("TAXPIN");  
             dataGridPrinterLayer.DataTable.Columns.Add("LAST_REVIS");  
             dataGridPrinterLayer.DataTable.Columns.Add("ACRES");  
             dataGridPrinterLayer.DataTable.Columns.Add("CALCULATED");  
 
             // Find all of the parcels that are in discussion and add those items to the data table  
             ShapeFileFeatureLayer shapefileFeatureLayer = new ShapeFileFeatureLayer(@"..\..\Data\Parcels.shp", ShapeFileReadWriteMode.ReadOnly);  
             shapefileFeatureLayer.Open();  
             Collection<Feature> features = shapefileFeatureLayer.QueryTools.GetFeaturesByColumnValue("AFFECTED", "D", ReturningColumnsType.AllColumns);  
             shapefileFeatureLayer.Close();  
 
             foreach (Feature feature in features)  
             {  
                 dataGridPrinterLayer.DataTable.Rows.Add(new object[4] { feature.ColumnValues["TAXPIN"], feature.ColumnValues["LAST_REVIS"], feature.ColumnValues["ACRES"], feature.ColumnValues["CALCULATED"] });  
             }  
 
             // Add the DataGridPrinterLayer to the PrinterInteractiveOverlay  
             PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
             printerInteractiveOverlay.PrinterLayers.Add("DataGridLayer2", dataGridPrinterLayer);  
         }  
 
         private void AddLogoImage()  
         {  
             //Load the image to a GeoImage and then create the ImagePrinterLayer using that image  
             GeoImage compassGeoImage = new GeoImage(@"..\..\Images\Compass.png");  
             ImagePrinterLayer imagePrinterLayer = new ImagePrinterLayer(compassGeoImage);  
 
             // Set the imagePrinterLayer position offset from the page center and .75 inches wide and .75 inches tall  
             RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);  
             imagePrinterLayer.SetPosition(.75, .75, pageBoundingbox.GetCenterPoint().X + 3.5, pageBoundingbox.GetCenterPoint().Y - 2.0, PrintingUnit.Inch);  
 
             // Add the imagePrinterLayer to the PrinterInteractiveOverlay  
             PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
             printerInteractiveOverlay.PrinterLayers.Add("ImageLayer", imagePrinterLayer);  
         }  
 
         private void AddScaleLineLayer()  
         {  
             // Get the PrinterInteractiveOverlay  
             PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
 
             // Grab the MapPrinterLayer as we need to pass that into the scaleLinePrinterLayer so it  
             // can be synced up to the map itself in real-time  
             MapPrinterLayer mapPrinterLayer = (MapPrinterLayer)printerInteractiveOverlay.PrinterLayers["MapLayer"];  
 
             //Create the scaleLinePrinterLayer and pass in the MapPrinterLayer  
             ScaleLinePrinterLayer scaleLinePrinterLayer = new ScaleLinePrinterLayer(mapPrinterLayer);  
             scaleLinePrinterLayer.MapUnit = GeographyUnit.Feet;  
 
             // Set the scale line position offset from the page center and 1.25 inches wide and .25 inches tall  
             RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);  
             scaleLinePrinterLayer.SetPosition(1.25, .25, pageBoundingbox.GetCenterPoint().X - 3.25, pageBoundingbox.GetCenterPoint().Y - 2.25, PrintingUnit.Inch);  
 
             // Add the ScaleLinePrinterLayer to the PrinterInteractiveOverlay  
             printerInteractiveOverlay.PrinterLayers.Add("ScaleLineLayer", scaleLinePrinterLayer);  
         }  
 
         #endregion  
 
         #region Helper Methods  
 
         private RectangleShape GetPageBoundingBox(PrintingUnit unit)  
         {  
             // This helper method gets the pages bounding box in the unit requested  
             PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
             PagePrinterLayer pagePrinterLayer = (PagePrinterLayer)printerInteractiveOverlay.PrinterLayers["PageLayer"];  
             return pagePrinterLayer.GetPosition(unit); ;  
         }  
 
         private PageSize GetPdfPageSize(PrinterPageSize pageSize)  
         {  
             PageSize pdfPageSize = PageSize.Letter;  
             switch (pageSize)  
             {  
                 case PrinterPageSize.AnsiA:  
                     pdfPageSize = PageSize.Letter;  
                     break;  
                 case PrinterPageSize.AnsiB:  
                     pdfPageSize = PageSize.Ledger;  
                     break;  
                 case PrinterPageSize.AnsiC:  
                     pdfPageSize = PageSize.A2;  
                     break;  
                 case PrinterPageSize.AnsiD:  
                     pdfPageSize = PageSize.A1;  
                     break;  
                 case PrinterPageSize.AnsiE:  
                     pdfPageSize = PageSize.A0;  
                     break;  
                 case PrinterPageSize.Custom:  
                     throw new NotSupportedException();  
                 default:  
                     throw new NotSupportedException();  
             }  
             return pdfPageSize;  
         }  
 
         private PaperSize GetPrintPreviewPaperSize(PagePrinterLayer pagePrinterLayer)  
         {  
             PaperSize printPreviewPaperSize = new PaperSize("AnsiA", 850, 1100);  
             switch (pagePrinterLayer.PageSize)  
             {  
                 case PrinterPageSize.AnsiA:  
                     printPreviewPaperSize = new PaperSize("AnsiA", 850, 1100);  
                     break;  
                 case PrinterPageSize.AnsiB:  
                     printPreviewPaperSize = new PaperSize("AnsiB", 1100, 1700);  
                     break;  
                 case PrinterPageSize.AnsiC:  
                     printPreviewPaperSize = new PaperSize("AnsiC", 1700, 2200);  
                     break;  
                 case PrinterPageSize.AnsiD:  
                     printPreviewPaperSize = new PaperSize("AnsiD", 2200, 3400);  
                     break;  
                 case PrinterPageSize.AnsiE:  
                     printPreviewPaperSize = new PaperSize("AnsiE", 3400, 4400);  
                     break;  
                 case PrinterPageSize.Custom:  
                     printPreviewPaperSize = new PaperSize("Custom Size", (int)pagePrinterLayer.CustomWidth, (int)pagePrinterLayer.CustomHeight);  
                     break;  
                 default:  
                     break;  
             }  
 
             return printPreviewPaperSize;  
         }  
 
         #endregion  
 
         #region Export Buttons  
         private void btnToPrintPreview_Click(object sender, RoutedEventArgs e)  
         {  
             PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
             PagePrinterLayer pagePrinterLayer = printerInteractiveOverlay.PrinterLayers["PageLayer"] as PagePrinterLayer;  
 
             PrintDialog printDialog = new PrintDialog();  
             PrintDocument printDocument = new PrintDocument();  
             printDocument.DefaultPageSettings.Landscape = true;  
             if (pagePrinterLayer.Orientation == PrinterOrientation.Portrait)  
             {  
                 printDocument.DefaultPageSettings.Landscape = false;  
             }  
 
             printDocument.DefaultPageSettings.PaperSize = GetPrintPreviewPaperSize(pagePrinterLayer);  
 
             PrinterGeoCanvas printerGeoCanvas = new PrinterGeoCanvas();  
             printerGeoCanvas.DrawingArea = printDocument.DefaultPageSettings.Bounds;  
             printerGeoCanvas.BeginDrawing(printDocument, pagePrinterLayer.GetBoundingBox(), Map1.MapUnit);  
 
             // Loop through all of the PrintingLayer in the PrinterInteractiveOverlay and print all of the  
             // except for the PagePrinterLayer  
             Collection<SimpleCandidate> labelsInAllLayers = new Collection<SimpleCandidate>();  
             foreach (PrinterLayer printerLayer in printerInteractiveOverlay.PrinterLayers)  
             {  
                 printerLayer.IsDrawing = true;  
                 if (!(printerLayer is PagePrinterLayer))  
                 {  
                     printerLayer.Draw(printerGeoCanvas, labelsInAllLayers);  
                 }  
                 printerLayer.IsDrawing = false;  
             }  
 
             printerGeoCanvas.Flush();  
 
             System.Windows.Forms.PrintPreviewDialog printPreviewDialog = new System.Windows.Forms.PrintPreviewDialog();  
             printPreviewDialog.Document = printDocument;  
             System.Windows.Forms.DialogResult dialogResult = printPreviewDialog.ShowDialog();  
         }  
 
         private void btnToBitmap_Click(object sender, RoutedEventArgs e)  
         {  
             PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
             PagePrinterLayer pagePrinterLayer = printerInteractiveOverlay.PrinterLayers["PageLayer"] as PagePrinterLayer;  
 
             // Create a bitmap that is the size of the pages bounding box.  The page by default is in points unit  
             // system which is very similar to pixels so that ampping is nice.  
             Bitmap bitmap = null;  
             try  
             {  
                 bitmap = new Bitmap((int)pagePrinterLayer.GetBoundingBox().Width, (int)pagePrinterLayer.GetBoundingBox().Height);  
 
                 // Create a GdiPlusGeoCanvas and start the drawing  
                 GdiPlusGeoCanvas gdiPlusGeoCanvas = new GdiPlusGeoCanvas();  
                 gdiPlusGeoCanvas.BeginDrawing(bitmap, pagePrinterLayer.GetBoundingBox(), Map1.MapUnit);  
 
                 // Loop through all of the PrintingLayer in the PrinterInteractiveOverlay and print all of the  
                 // except for the PagePrinterLayer  
                 Collection<SimpleCandidate> labelsInAllLayers = new Collection<SimpleCandidate>();  
                 foreach (PrinterLayer printerLayer in printerInteractiveOverlay.PrinterLayers)  
                 {  
                     printerLayer.IsDrawing = true;  
                     if (!(printerLayer is PagePrinterLayer))  
                     {  
                         printerLayer.Draw(gdiPlusGeoCanvas, labelsInAllLayers);  
                     }  
                     printerLayer.IsDrawing = false;  
                 }  
 
                 // End the drawing  
                 gdiPlusGeoCanvas.EndDrawing();  
 
                 //Save the resulting bitmap to a file and open the file to show the user  
                 string filename = "PrintingResults.bmp";  
                 bitmap.Save(filename);  
                 Process.Start(filename);  
             }  
             catch (Exception ex)  
             {  
                 MessageBox.Show(ex.Message + " " + ex.StackTrace, "Exception");  
             }  
             finally  
             {  
                 if (bitmap != null) { bitmap.Dispose(); }  
             }  
         }  
 
         private void btnToPDF_Click(object sender, RoutedEventArgs e)  
         {  
             // Get the PrinterInteractiveOverlay and PagePrinterLayer as we are going to need them below  
             PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
             PagePrinterLayer pagePrinterLayer = printerInteractiveOverlay.PrinterLayers["PageLayer"] as PagePrinterLayer;  
 
             PdfDocument pdfDocument = null;  
             PdfPage pdfPage = null;  
 
             try  
             {  
                 // Create the PDF documents, pages, and copnfigure them  
                 pdfDocument = new PdfDocument();  
                 pdfPage = pdfDocument.AddPage();  
                 pdfPage.Orientation = pagePrinterLayer.Orientation == PrinterOrientation.Portrait ? PageOrientation.Portrait : PageOrientation.Landscape;  
                 pdfPage.Size = GetPdfPageSize(pagePrinterLayer.PageSize);  
 
                 // Create the PdfGeoCanvas and pass tha PdfPage into the BeginDrawing  
                 PdfGeoCanvas pdfGeoCanvas = new PdfGeoCanvas();  
                 pdfGeoCanvas.BeginDrawing(pdfPage, pagePrinterLayer.GetBoundingBox(), Map1.MapUnit);  
 
                 // Loop through all of the PrinterLayers and draw them to the canvas except for the  
                 // PagePrinterLayer which is just used for the visual layout  
                 Collection<SimpleCandidate> labelsInAllLayers = new Collection<SimpleCandidate>();  
                 foreach (PrinterLayer printerLayer in printerInteractiveOverlay.PrinterLayers)  
                 {  
                     printerLayer.IsDrawing = true;  
                     if (!(printerLayer is PagePrinterLayer))  
                     {  
                         printerLayer.Draw(pdfGeoCanvas, labelsInAllLayers);  
                     }  
                     printerLayer.IsDrawing = false;  
                 }  
 
                 // Finish up the drawing  
                 pdfGeoCanvas.EndDrawing();  
 
                 // Dave the PDF document and launch it in the default viewer to show the user  
                 string filename = "PrintingResults.pdf";  
                 pdfDocument.Save(filename);  
                 Process.Start(filename);  
             }  
             catch (Exception ex)  
             {  
                 MessageBox.Show(ex.Message + " " + ex.StackTrace, "Exception");  
             }  
             finally  
             {  
                 if (pdfDocument != null) { pdfDocument.Dispose(); }  
             }  
         }  
 
         private void btnToPrinter_Click(object sender, RoutedEventArgs e)  
         {  
             PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
             PagePrinterLayer pagePrinterLayer = printerInteractiveOverlay.PrinterLayers["PageLayer"] as PagePrinterLayer;  
 
             PrintDocument printDocument = new PrintDocument();  
             printDocument.DefaultPageSettings.Landscape = true;  
             if (pagePrinterLayer.Orientation == PrinterOrientation.Portrait)  
             {  
                 printDocument.DefaultPageSettings.Landscape = false;  
             }  
 
             printDocument.DefaultPageSettings.PaperSize = GetPrintPreviewPaperSize(pagePrinterLayer);  
 
             PrinterGeoCanvas printerGeoCanvas = new PrinterGeoCanvas();  
             printerGeoCanvas.DrawingArea = new Rectangle(0, 0, Convert.ToInt32(printDocument.DefaultPageSettings.PrintableArea.Width), Convert.ToInt32(printDocument.DefaultPageSettings.PrintableArea.Height));  
             printerGeoCanvas.BeginDrawing(printDocument, pagePrinterLayer.GetBoundingBox(), Map1.MapUnit);  
 
             // Loop through all of the PrintingLayer in the PrinterInteractiveOverlay and print all of the  
             // except for the PagePrinterLayer  
             Collection<SimpleCandidate> labelsInAllLayers = new Collection<SimpleCandidate>();  
             foreach (PrinterLayer printerLayer in printerInteractiveOverlay.PrinterLayers)  
             {  
                 printerLayer.IsDrawing = true;  
                 if (!(printerLayer is PagePrinterLayer))  
                 {  
                     printerLayer.Draw(printerGeoCanvas, labelsInAllLayers);  
                 }  
                 printerLayer.IsDrawing = false;  
             }  
 
             printerGeoCanvas.EndDrawing();  
         }  
         #endregion  
 
         #region Map Events  
         private void Map1_CurrentScaleChanged(object sender, CurrentScaleChangedWpfMapEventArgs e)  
         {  
             // Here we sync up the zoom combox to the map's zoom level.  
             PrinterZoomLevelSet printerZoomLevelSet = (PrinterZoomLevelSet)Map1.ZoomLevelSet;  
             ZoomLevel currentZoomLevel = printerZoomLevelSet.GetZoomLevel(Map1.CurrentExtent, Map1.ActualWidth, Map1.MapUnit);  
             cbxPercentage.SelectedItem = printerZoomLevelSet.GetZoomPercentage(currentZoomLevel) + "%";  
         }  
 
         private void Map1_MapClick(object sender, MapClickWpfMapEventArgs e)  
         {  
             // Here we loop through all of the PrinterLayers to find the one the user right mouse clicked on.  
             // Then we show the right click menu to give the user some options  
             if (e.MouseButton == MapMouseButton.Right)  
             {  
                 ((MenuItem)Map1.ContextMenu.Items[0]).IsEnabled = false;  
                 ((MenuItem)Map1.ContextMenu.Items[1]).IsEnabled = false;  
 
                 PrinterInteractiveOverlay printerOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
                 for (int i = printerOverlay.PrinterLayers.Count - 1; i >= 0; i--)  
                 {  
                     if (printerOverlay.PrinterLayers[i].GetType() != typeof(PagePrinterLayer))  
                     {  
                         RectangleShape boundingBox = printerOverlay.PrinterLayers[i].GetPosition();  
                         if (boundingBox.Contains(e.WorldLocation))  
                         {  
                             ((MenuItem)Map1.ContextMenu.Items[0]).Tag = printerOverlay.PrinterLayers[i];  
                             ((MenuItem)Map1.ContextMenu.Items[0]).IsEnabled = true;  
 
                             ((MenuItem)Map1.ContextMenu.Items[1]).Tag = printerOverlay.PrinterLayers[i];  
                             ((MenuItem)Map1.ContextMenu.Items[1]).IsEnabled = true;  
 
                             break;  
                         }  
                     }  
                 }  
             }  
         }  
 
         #endregion  
 
         #region Pan & Zoom Buttons  
 
         private void btnZoomIn_Click(object sender, RoutedEventArgs e)  
         {  
             // Grab the MapPrinterLayer and adjust the extent  
             PrinterInteractiveOverlay printerOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
             MapPrinterLayer mapPrinterLayer = ((MapPrinterLayer)(printerOverlay.PrinterLayers["MapLayer"]));  
 
             // Here we snap the current scale to the default zoomLevelSet when we zoom in  
             ZoomLevelSet zoomLevelSet = new ZoomLevelSet();  
             double newScale = ZoomLevelSet.GetLowerZoomLevelScale(ExtentHelper.GetScale(mapPrinterLayer.MapExtent, (float)mapPrinterLayer.GetBoundingBox().Width, mapPrinterLayer.MapUnit), zoomLevelSet);  
             mapPrinterLayer.MapExtent = ExtentHelper.ZoomToScale(newScale, mapPrinterLayer.MapExtent, mapPrinterLayer.MapUnit, (float)mapPrinterLayer.GetBoundingBox().Width, (float)mapPrinterLayer.GetBoundingBox().Height);  
 
             Map1.Refresh();  
         }  
 
         private void btnZoomOut_Click(object sender, RoutedEventArgs e)  
         {  
             // Grab the MapPrinterLayer and adjust the extent  
             PrinterInteractiveOverlay printerOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
             MapPrinterLayer mapPrinterLayer = ((MapPrinterLayer)(printerOverlay.PrinterLayers["MapLayer"]));  
 
             // Here we snap the current scale to the default zoomLevelSet when we zoom in  
             ZoomLevelSet zoomLevelSet = new ZoomLevelSet();  
             double newScale = ZoomLevelSet.GetHigherZoomLevelScale(ExtentHelper.GetScale(mapPrinterLayer.MapExtent, (float)mapPrinterLayer.GetBoundingBox().Width, mapPrinterLayer.MapUnit), zoomLevelSet);  
             mapPrinterLayer.MapExtent = ExtentHelper.ZoomToScale(newScale, mapPrinterLayer.MapExtent, mapPrinterLayer.MapUnit, (float)mapPrinterLayer.GetBoundingBox().Width, (float)mapPrinterLayer.GetBoundingBox().Height);  
 
             Map1.Refresh();  
         }  
 
         private void btnPan_Click(object sender, EventArgs e)  
         {  
             // Grab the MapPrinterLayer and adjust the extent  
             PrinterInteractiveOverlay printerOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
 
             MapPrinterLayer mapPrinterLayer = ((MapPrinterLayer)(printerOverlay.PrinterLayers["MapLayer"]));  
 
             if (sender == btnPanNorth)  
             { mapPrinterLayer.MapExtent = ExtentHelper.Pan(mapPrinterLayer.MapExtent, PanDirection.Up, 30); }  
             else if (sender == btnPanSouth)  
             { mapPrinterLayer.MapExtent = ExtentHelper.Pan(mapPrinterLayer.MapExtent, PanDirection.Down, 30); }  
             else if (sender == btnPanWest)  
             { mapPrinterLayer.MapExtent = ExtentHelper.Pan(mapPrinterLayer.MapExtent, PanDirection.Left, 30); }  
             else if (sender == btnPanEast)  
             { mapPrinterLayer.MapExtent = ExtentHelper.Pan(mapPrinterLayer.MapExtent, PanDirection.Right, 30); }  
 
             Map1.Refresh();  
         }  
 
         #endregion  
 
         #region Combo Boxes & ContextMenu  
 
         private void SetupContextMenu()  
         {  
             Map1.ContextMenu = new System.Windows.Controls.ContextMenu();  
 
             MenuItem removeItem = new MenuItem();  
             removeItem.Header = "Remove";  
             removeItem.Click += new RoutedEventHandler(RemoveLayer_Click);  
             Map1.ContextMenu.Items.Add(removeItem);  
 
             MenuItem editItem = new MenuItem();  
             editItem.Header = "Property";  
             editItem.Click += new RoutedEventHandler(EditLayer_Click);  
             Map1.ContextMenu.Items.Add(editItem);  
         }  
 
         private void SetupComboBoxes()  
         {  
             // Set the default combobox items  
             cbxPaperSize.SelectedIndex = 0;  
             cbxOrientation.SelectedIndex = 0;  
 
             //Setup the zoom level combobox to relfect the zoom percentages  
             foreach (ZoomLevel level in Map1.ZoomLevelSet.GetZoomLevels())  
             {  
                 cbxPercentage.Items.Add(((PrinterZoomLevelSet)Map1.ZoomLevelSet).GetZoomPercentage(level) + "%");  
             }  
         }  
 
         private void cbxPaperSize_SelectionChanged(object sender, SelectionChangedEventArgs e)  
         {  
             if (IsLoaded)  
             {  
                 // When the page size combobox is changed then we update the PagePrinterLayer to reflect the changes  
                 PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
                 PagePrinterLayer pagePrinterLayer = (PagePrinterLayer)printerInteractiveOverlay.PrinterLayers["PageLayer"];  
 
                 string selectText = ((ComboBoxItem)e.AddedItems[0]).Content.ToString();  
                 if (selectText.StartsWith("ANSI A"))  
                     pagePrinterLayer.PageSize = PrinterPageSize.AnsiA;  
                 else if (selectText.StartsWith("ANSI B"))  
                     pagePrinterLayer.PageSize = PrinterPageSize.AnsiB;  
                 else if (selectText.StartsWith("ANSI C"))  
                     pagePrinterLayer.PageSize = PrinterPageSize.AnsiC;  
                 else if (selectText.StartsWith("ANSI D"))  
                     pagePrinterLayer.PageSize = PrinterPageSize.AnsiD;  
                 else if (selectText.StartsWith("ANSI E"))  
                     pagePrinterLayer.PageSize = PrinterPageSize.AnsiE;  
 
                 Map1.Refresh();  
             }  
         }  
 
         private void cbxOrientation_SelectionChanged(object sender, SelectionChangedEventArgs e)  
         {  
             // When the orientation combobox is changed then we update the PagePrinterLayer to reflect the changes  
             if (this.IsLoaded)  
             {  
                 PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
                 PagePrinterLayer pagePrinterLayer = (PagePrinterLayer)printerInteractiveOverlay.PrinterLayers["PageLayer"];  
 
                 string selectText = ((ComboBoxItem)e.AddedItems[0]).Content.ToString();  
                 if (selectText.ToUpper() == "LANDSCAPE")  
                 {  
                     pagePrinterLayer.Orientation = PrinterOrientation.Landscape;  
                 }  
                 else if (selectText.ToUpper() == "PORTRAIT")  
                 {  
                     pagePrinterLayer.Orientation = PrinterOrientation.Portrait;  
                 }  
 
                 Map1.Refresh();  
             }  
         }  
 
         private void cbxPercentage_SelectionChanged(object sender, SelectionChangedEventArgs e)  
         {  
             if (this.IsLoaded)  
             {  
                 String zoomString = (String)cbxPercentage.SelectedItem;  
                 double currentZoom = Double.Parse(zoomString.Replace("%", ""));  
                 Map1.CurrentScale = PrinterHelper.GetPointsPerGeographyUnit(Map1.MapUnit) / (currentZoom / 100);  
                 Map1.Refresh();  
             }  
         }  
 
         #endregion  
 
         #region Toolbox  
 
         private void toolBoxItem_Click(object sender, RoutedEventArgs e)  
         {  
             PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
             PrinterLayer printerLayer = null;  
 
             if (sender == btnAddLabel)  
             {  
                 printerLayer = new LabelPrinterLayer();  
                 printerLayer.SetPosition(2, 1, 0, 0, PrintingUnit.Inch);  
             }  
             else if (sender == btnAddImage)  
             {  
                 printerLayer = new ImagePrinterLayer();  
             }  
             else if (sender == btnAddScaleLine)  
             {  
                 MessageBox.Show("NotImplemented");  
             }  
             else if (sender == btnAddScaleBar)  
             {  
                 MessageBox.Show("NotImplemented");  
             }  
             else if (sender == btnAddDataGrid)  
             {  
                 printerLayer = new DataGridPrinterLayer();  
                 printerLayer.SetPosition(1, 1, 0, 0, PrintingUnit.Inch);  
             }  
 
             //if (ShowPrinterLayerProperties(printerLayer) == DialogResult.OK)  
             if (ShowPrinterLayerProperties(printerLayer) == true)  
             {  
                 printerInteractiveOverlay.PrinterLayers.Add(printerLayer);  
                 Map1.Refresh();  
             }  
         }  
         #endregion  
 
         #region Right Click and Dialogs  
 
         private void RemoveLayer_Click(object sender, RoutedEventArgs e)  
         {  
             PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
             PrinterLayer printerLayer = (PrinterLayer)((MenuItem)sender).Tag;  
 
             printerInteractiveOverlay.PrinterLayers.Remove(printerLayer);  
 
             Map1.Refresh();  
         }  
 
         private void EditLayer_Click(object sender, RoutedEventArgs e)  
         {  
             PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];  
             PrinterLayer printerLayer = (PrinterLayer)((MenuItem)sender).Tag;  
 
             ShowPrinterLayerProperties(printerLayer);  
             Map1.Refresh();  
         }  
 
         private bool? ShowPrinterLayerProperties(PrinterLayer printerLayer)  
         {  
             bool? dialogResult = false;  
 
             if (printerLayer != null)  
             {  
                 if (printerLayer.GetType() == typeof(LabelPrinterLayer))  
                 {  
                     LabelPrinterLayerProperty dialog = new LabelPrinterLayerProperty((LabelPrinterLayer)printerLayer);  
                     dialog.Owner = Application.Current.MainWindow;  
                     dialogResult = dialog.ShowDialog();  
                 }  
                 else if (printerLayer.GetType() == typeof(ScaleBarPrinterLayer))  
                 {  
                     MessageBox.Show("Scalebar (Coming Soon)");  
                 }  
                 else if (printerLayer.GetType() == typeof(ScaleLinePrinterLayer))  
                 {  
                     MessageBox.Show("Scaleline (Coming Soon)");  
                 }  
                 else if (printerLayer.GetType() == typeof(ImagePrinterLayer))  
                 {  
                     ImagePrinterLayerProperty dialog = new ImagePrinterLayerProperty((ImagePrinterLayer)printerLayer);  
                     dialog.Owner = Application.Current.MainWindow;  
                     dialogResult = dialog.ShowDialog();  
                 }  
                 else if (printerLayer.GetType() == typeof(DataGridPrinterLayer))  
                 {  
                     DataGridPrinterLayerProperty dialog = new DataGridPrinterLayerProperty((DataGridPrinterLayer)printerLayer);  
                     dialog.Owner = Application.Current.MainWindow;  
                     dialogResult = dialog.ShowDialog();  
                 }  
             }  
 
             return dialogResult;  
         }  
         #endregion  
     }  
 }  
 
 

InstructionPanel.cs

 using System.Windows.Controls;  
 
 namespace LargeScaleMapPrinting  
 {  
     public class InstructionPanel : ContentControl  
     {  
         public InstructionPanel()  
             : base()  
         {  
             DefaultStyleKey = typeof(InstructionPanel);  
         }  
     }  
 }  
 
source_code_wpfdesktopeditionsample_webprintersample.zip.txt · Last modified: 2015/09/09 03:39 by admin