ArcGIS Pro 3.4 API Reference Guide
ArcGIS.Desktop.Core Namespace / LayoutFrameworkExtender Class / CreateLayoutPaneAsync Method
Does not need to be specified.
Layout
Example

In This Topic
    CreateLayoutPaneAsync Method
    In This Topic
    Create and activate a new layout pane using a Layout reference. Must be called on GUI thread.
    Syntax
    public static Task<ILayoutPane> CreateLayoutPaneAsync( 
       PaneCollection paneCollection,
       Layout layout
    )
    Public Shared Function CreateLayoutPaneAsync( _
       ByVal paneCollection As PaneCollection, _
       ByVal layout As Layout _
    ) As Task(Of ILayoutPane)

    Parameters

    paneCollection
    Does not need to be specified.
    layout
    Layout

    Return Value

    Exceptions
    ExceptionDescription
    Must be called on GUI thread
    Remarks
    Be sure to call this on the GUI thread. Do not execute within a QueuedTask.Run block.
    Example
    CreateLayout_WITH_WD_AND_HT
    //This example creates a new layout using a minimum set of parameters.
    
    //Added references
    using ArcGIS.Desktop.Layouts;                    
    using ArcGIS.Desktop.Framework.Threading.Tasks; 
    using ArcGIS.Desktop.Core;
    
    public class CreateLayoutEx1
    {
      async public static Task<Layout> CreateBasicLayout(double width, double height, LinearUnit units, string LayoutName)
      {
        Layout layout = null;
        await QueuedTask.Run(() =>
        {
          layout = LayoutFactory.Instance.CreateLayout(width, height, units);
          layout.SetName(LayoutName);
        });
    
        //Open the layout in a pane on the UI!
        await ProApp.Panes.CreateLayoutPaneAsync(layout);
    
        return layout;
      }
    }
    CreateLayout_With_CIMPAGE
    //This example creates a new layout using a CIM page definion with rulers and guides included.
    
    //Added references
    using ArcGIS.Desktop.Layouts;                      
    using ArcGIS.Desktop.Framework.Threading.Tasks;    
    using ArcGIS.Desktop.Core;
    using ArcGIS.Core.CIM;
    
    public class CreateLayoutEx2
    {
      async public static Task<Layout> CreateCIMLayout(double width, double height, LinearUnit units, string LayoutName)
      {
        Layout CIMlayout = null;
        await QueuedTask.Run(() =>
        {
          //Set up a page
          CIMPage newPage = new CIMPage();
    
          //required
          newPage.Width = width;
          newPage.Height = height;
          newPage.Units = units;
    
          //optional rulers
          newPage.ShowRulers = true;
          newPage.SmallestRulerDivision = 5;
    
          //optional guides
          newPage.ShowGuides = true;
          CIMGuide guide1 = new CIMGuide();
          guide1.Position = 25;
          guide1.Orientation = Orientation.Vertical;
          CIMGuide guide2 = new CIMGuide();
          guide2.Position = 185;
          guide2.Orientation = Orientation.Vertical;
          CIMGuide guide3 = new CIMGuide();
          guide3.Position = 25;
          guide3.Orientation = Orientation.Horizontal;
          CIMGuide guide4 = new CIMGuide();
          guide4.Position = 272;
          guide4.Orientation = Orientation.Horizontal;
    
          List<CIMGuide> guideList = new List<CIMGuide>();
          guideList.Add(guide1);
          guideList.Add(guide2);
          guideList.Add(guide3);
          guideList.Add(guide4);
          newPage.Guides = guideList.ToArray();
    
          Layout layout = LayoutFactory.Instance.CreateLayout(newPage);
    
          layout.SetName(LayoutName);
        });
    
        //Open the layout in a pane on the UI!
        await ProApp.Panes.CreateLayoutPaneAsync(CIMlayout);
        return CIMlayout;
      }
    }
    LayoutView_LayoutFrameWorkExtender
    //This sample checks to see if a layout project item already has an open application pane.  
    //If it does, it checks if it is the active layout view, if not, it creates, activates and opens a new pane.
    
    //Reference a layoutitem in a project by name
    LayoutProjectItem layoutItem = Project.Current.GetItems<LayoutProjectItem>().FirstOrDefault(item => item.Name.Equals("Layout View"));
    
    //Get the layout associated with the layoutitem
    Layout lyt = await QueuedTask.Run(() => layoutItem.GetLayout());
          
    //Iterate through each pane in the application and check to see if the layout is already open and if so, activate it
    foreach (var pane in ProApp.Panes)
    {
      var layoutPane = pane as ILayoutPane;
      if (layoutPane == null)  //if not a layout pane, continue to the next pane
        continue;
      if (layoutPane.LayoutView.Layout == lyt)  //if the layout pane does match the layout, activate it.
      {
        (layoutPane as Pane).Activate();
        layoutPane.Caption = "This is a test";
        System.Windows.MessageBox.Show(layoutPane.Caption);
        return;
      }
    }
    //Otherwise, create, open, and activate the layout if not already open
    ILayoutPane newPane = await ProApp.Panes.CreateLayoutPaneAsync(lyt);
    
    //Zoom to the full extent of the layout
    await QueuedTask.Run(() => newPane.LayoutView.ZoomTo100Percent());
    Open a layout project item in a new view
    //Open a layout project item in a new view.
    //A layout project item may exist but it may not be open in a view. 
    
    //Reference a layout project item by name
    LayoutProjectItem someLytItem = Project.Current.GetItems<LayoutProjectItem>()
                              .FirstOrDefault(item => item.Name.Equals("MyLayout"));
    
    //Get the layout associated with the layout project item
    Layout layout = await QueuedTask.Run(() => someLytItem.GetLayout());  //Worker thread
    
    //Create the new pane - call on UI
    ILayoutPane iNewLayoutPane = await ProApp.Panes.CreateLayoutPaneAsync(layout); //GUI thread
    Create a new, basic layout and open it
    //Create a new, basic layout and open it.
    
    //Create layout with minimum set of parameters on the worker thread
    Layout lyt = await QueuedTask.Run(() =>
    {
      var newLayout = LayoutFactory.Instance.CreateLayout(8.5, 11, LinearUnit.Inches);
      newLayout.SetName("New 8.5x11 Layout");
      return newLayout;
    });
          
    //Open new layout on the GUI thread
    await ProApp.Panes.CreateLayoutPaneAsync(lyt);
    Create a new layout using a modified CIM and open it
    //Create a new layout using a modified CIM and open it.
    //The CIM exposes additional members that may not be
    //available through the managed API.  
    //In this example, optional guides are added.
    
    //Create a new CIMLayout on the worker thread
    Layout newCIMLayout = await QueuedTask.Run(() =>
    {
      //Set up a CIM page
      CIMPage newPage = new CIMPage
      {
        //required parameters
        Width = 8.5,
        Height = 11,
        Units = LinearUnit.Inches,
    
        //optional rulers
        ShowRulers = true,
        SmallestRulerDivision = 0.5,
    
        //optional guides
        ShowGuides = true
      };
      CIMGuide guide1 = new CIMGuide
      {
        Position = 1,
        Orientation = Orientation.Vertical
      };
      CIMGuide guide2 = new CIMGuide
      {
        Position = 6.5,
        Orientation = Orientation.Vertical
      };
      CIMGuide guide3 = new CIMGuide
      {
        Position = 1,
        Orientation = Orientation.Horizontal
      };
      CIMGuide guide4 = new CIMGuide
      {
        Position = 10,
        Orientation = Orientation.Horizontal
      };
    
      List<CIMGuide> guideList = new List<CIMGuide>
      {
        guide1,
        guide2,
        guide3,
        guide4
      };
      newPage.Guides = guideList.ToArray();
    
      //Construct the new layout using the customized cim definitions
      var layout_local = LayoutFactory.Instance.CreateLayout(newPage);
      layout_local.SetName("New 8.5x11 Layout");
      return layout_local;
    });
    
    //Open new layout on the GUI thread
    await ProApp.Panes.CreateLayoutPaneAsync(newCIMLayout);
    Requirements

    Target Platforms: Windows 11, Windows 10

    ArcGIS Pro version: 3 or higher.
    See Also