Pro SDK 1.4现在已经发布使用,新的SDK包含了许多新特性,伴随着新版本的发布,SDK可以在 Visual Studio中安装( Visual Studio Gallery ,推荐方法),也可以在myesri中下载使用。 接下来简要介绍一下1.4 SDK里一些增强的功能: 配置—-新的添加项模式/模板,允许用户自定义 Pro UI/UX,本质上,可以设计任何的添加项和所有符合添加条件的所有性能。 Light/dark主题风格—伴随着Pro 1.4的light/dark主题功能,SDK允许用户去设计添加项和布局为了最佳的可视性。 API 的提升—关于数据库连接和SQL语法有新的类和方法,水平或者垂直基准,还有一些新的控件。 新的代码示例和指导—这些可以在社区网站和维基找到相关示例(以下会介绍) 更多详细的介绍大家还是去看API参考文档,那里包含了更多API和SDK新发布的亮点,以及所有新添加的完整的列表。 下面贴一下可供学习的地址: 开发者:https://developers.arcgis.com/extending-the-platform/ github的示例:https://github.com/esri/arcgis-pro-sdk-community-samples API参考指南:http://pro.arcgis.com/en/pro-app/sdk/api-referece/ GEONET:https://geonet.esri.com/groups/arcgis-pro-sdk

搭建环境:ArcGIS Pro 1.4+ArcGIS Pro SDK 1.4 for.NET(http://www.esri.com/) Visual Studio2013或者Visual Studio2015(https://www.microsoft.com/zh-cn) 可以构建第一个示例练练手,这里就不详细介绍了,官网上面非常详细全面,大家可以去看看

接下来进入正题

Pro 1.4的打开界面有很多种,简单介绍几种

1、按照工程打开

Arcgis 支持docker吗 arcgis pro sdk_arcgis

2、按照地图选择

Arcgis 支持docker吗 arcgis pro sdk_sdk_02

3、按照行政区域

Arcgis 支持docker吗 arcgis pro sdk_UI_03

以上加载的是示例,由于大家安装Pro的时候大部分都不是按照默认路径安装,运行程序的时候可能会出现如下问题,如图

Arcgis 支持docker吗 arcgis pro sdk_arcgis_04

原因是默认的csproj文件里默认的路径是安装Pro的时候默认的安装位置,用记事本打开csproj文件,把你安装Pro的位置改进去就可以解决了,如图

Arcgis 支持docker吗 arcgis pro sdk_UI_05

有很多处,这里就不一一标识。

我们来构建一个示例:

这里我命名为GeocodeConfiguration,

Arcgis 支持docker吗 arcgis pro sdk_arcgis_06

新建一个文件夹,命名为Controls,下面新建一个User control,这里我将它命名为GeocodeUI,自定义一个UI,可以按照你的任何想法来进行设计,界面如图

Arcgis 支持docker吗 arcgis pro sdk_Arcgis 支持docker吗_07

这里我添加了一个Button控件,用于访问添加的地图的地址

接下来自定义一个启动界面,这里我命名为GeocodeStartPage,仍然是可以根据你的任何想法设计出你想要的界面,我们加入刚才的User control,界面如图

Arcgis 支持docker吗 arcgis pro sdk_Arcgis 支持docker吗_08

新建一个.cs文件,这里命名为GeocodeViewModel,我们可以写入Find Location的address来作为默认的查询地址 打开ConfigurationManager.cs文件,在OnShowSplashScreen的覆盖方法中,我们可以重写默认的方法以返回一个System.windows.window来作为我们得自定义启动界面,管理布局模板将在”SplashScreen.xaml”中添加默认实现的启动界面窗口,我们也可以进行自定义,删除回调或者返回NULL以保留SplashScreen,这里我把刚才的GeocodeStartPage界面作为自定义界面,代码如下:

private GeocodeStartPageViewModel _vm;
        /// <summary>
        /// Pro启动之前的界面.取代默认的启动界面
        /// </summary>
        /// <returns> 实现控件和启动界面的功能. 
        ///如果自定义的界面不能使用. 那么将会显示默认的界面.</returns>
        protected override System.Windows.FrameworkElement OnShowStartPage()
        {
            if (_vm == null)
            {
                _vm = new GeocodeStartPageViewModel();
            }
            var page = new GeocodeStartPage();
            page.DataContext = _vm;
            return page;
        }

我们也可以添加BUTTON,自定义想要的任何功能,接下来我们添加一个Button来实现一个简单的功能,这里命名为WorkflowButton

Arcgis 支持docker吗 arcgis pro sdk_自定义_09

在它的.cs文件里面我们写入这段代码:

internal class WorkflowButton1 : Button
    {
        protected override void OnClick()
        {
            MessageBox.show("Test");
        }
}

打开config.daml,在这里我们可以看到刚才加入的Button的信息

Arcgis 支持docker吗 arcgis pro sdk_Arcgis 支持docker吗_10

Arcgis 支持docker吗 arcgis pro sdk_Arcgis 支持docker吗_11

修改控件,我这里修改为CUSTOM.

我们运行一下,界面如图

Arcgis 支持docker吗 arcgis pro sdk_Arcgis 支持docker吗_12

Arcgis 支持docker吗 arcgis pro sdk_自定义_13

默认的菜单栏工具栏是这个样子的,

Arcgis 支持docker吗 arcgis pro sdk_Arcgis 支持docker吗_14

我们可以把这些工具自由组合,例如把不需要的去掉,需要的整合在一个Tab或者group里面,也可以把Tab、Group、工具的名称自定义改名字,我们简单做一个示例,效果就是把默认菜单栏全部消除,只留下刚才我们自定义的CUSTOM控件。

打开ConfigurationManager.cs,在ConfigurationManager中,添加一个事件响应函数OnUpdataDatabase,覆盖DAML数据库,代码如下:

#region override daml database
        protected override void onupdatedatabase(xdocument database)
        {
            var nsp = database.root.name.namespace;
            // 选择所有的Tab元素            
var tabelements = from seg in database.root.descendants(nsp + "tab") select seg;
// 把所有需要移动的元素聚集在一起    
var elements = new hashset<xelement>();
            foreach (var tabelement in tabelements)
            {
                // 跳过根和后台元素               
     if (tabelement.parent == null)
                    continue;
                var id = tabelement.attribute("id");
                if (id == null || id.Value.StartsWith(“Geocodeconfiguration”)) 
                continue;
                elements.add(tabelement);
            }
            // 移动
            foreach (var element in elements)
            {
                element.remove();
            }
        }
        #endregion

需要注意的是,OnUpdataDatabase使用单个参数XDocument database,在启动期间,来自Pro(bin\Extensions)中所被检测到的add-in和布局的所有的DAML文件都合并到单个DAML中,所以在编辑此XML文件的时候要小心,它定义了整个程序的UI

我们来运行一下,界面如图:

Arcgis 支持docker吗 arcgis pro sdk_自定义_15

如果我们想要访问一个新的地址,默认是需要新打开一个工程然后访问,这里我们自定义一个Geocode来实现连续访问的效果,默认如图

Arcgis 支持docker吗 arcgis pro sdk_Arcgis 支持docker吗_16

我们新建立一个Tab,这里命名为GeocodeBackstageTab,

Arcgis 支持docker吗 arcgis pro sdk_Arcgis 支持docker吗_17

打开config.daml,我们可以看到刚才加入的BackstageTab的信息,

Arcgis 支持docker吗 arcgis pro sdk_Arcgis 支持docker吗_18

这里我把它的caption改为Geocode,placewith改为esri_core_SaveProjectButton 打开它的设计界面,加入这样一句代码

<Control:GeocodeUI Address="{Binding Address}"></Control:GeocodeUI>

打开它的ViewModel.cs,看到如下代码:

private string _tabHeading = "Tab Title";
        public string TabHeading
        {
            get
            {
                return _tabHeading;
            }
            set
            {
                SetProperty(ref _tabHeading, value, () => TabHeading);
            }
        }

我这里把”Tab Title”修改为“Geocode” 复制粘贴此段代码,做如下修改:

private string _address = "Los Angeles";
        public string Address
        {
            get
            {
                return _address ;
            }
            set
            {
                SetProperty(ref _address , value, () => Address);
            }
        }

然后打开ConfigurationManager.cs,在刚才的updata函数里面加入如下代码:

if(tabElement.Parent.Name.LocalName.StartsWith(“backstage”)){
     If(id.Value==”esri_core_newProjectBackStageTab”  ||
        id.Value==”esri_core_openProjectBackStageTab”){
          elements.Add(tabElement);
      }
     continue;
}

然后我们运行一下,界面如图:

Arcgis 支持docker吗 arcgis pro sdk_Arcgis 支持docker吗_19

修改地址,继续访问

Arcgis 支持docker吗 arcgis pro sdk_自定义_20

PS:尽量不要直接复制本文里面的代码直接粘贴到项目里,可能会由于空格或者其他问题出现较多错误。 欢迎大家指正交流