【ArcGIS Pro二次开发】(5):UI管理_自定义控件的位置

news/2024/11/7 5:23:39/

新增的自定义控件一般放在默认的【加载项】选项卡下,但是根据需求,我们可能需要将控件放在新的自定义选项卡下,在自定义选项卡添加系统自带的控件,将自定义的按钮等控件放在右键菜单栏里以方便使用,等等。

下面就以一个小例子来具体做一下。

新建一个项目,命名为【UIManager2】,再添加1个ArcGIS Pro 按钮【UIManager2_Button1】作为示例按钮。


一、新建自定义选项卡、自定义组,添加自定义按钮

ArcGIS Pro工具栏的层级关系为【选项卡Tab、组Group、控件Control】。

新建选项卡【UIManager2_Tab】,再新建组【UIManager2_Group1】放置于选项卡【UIManager2_Tab】之下,再把上一步中添加的按钮【UIManager2_Button1】放在组【UIManager2_Group1】之下。

更新Config.daml文件中的</insertModule>模块即可实现以上功能。

    <insertModule id="UIManager2_Module" className="Module1" autoLoad="false" caption="Module1"><tabs><tab id="UIManager2_Tab" caption="UI管理器"><!--添加自定义的组--><group refID="UIManager2_Group1" /></tab></tabs><groups><group id="UIManager2_Group1" caption="示例组" appearsOnAddInTab="false"><!-- 添加自定义按钮 --><button refID="UIManager2_Button1" size="large" /></group></groups><controls><button id="UIManager2_Button1" caption="示例按钮" className="Button1" loadOnClick="true" smallImage="pack://application:,,,/ArcGIS.Desktop.Resources;component/Images/GenericButtonBlue16.png" largeImage="pack://application:,,,/ArcGIS.Desktop.Resources;component/Images/GenericButtonBlue32.png"><tooltip heading="Tooltip Heading">Tooltip text<disabledText /></tooltip></button></controls></insertModule>

实现结果如下:


二、在自定义选项卡中添加系统自带的组

在新建选项卡【UIManager2_Tab】下添加一个系统自带的组【esri_geoprocessing_analysisTools】,即【地理处理】。

更新Config.daml文件中的</tab>模块。

        <tab id="UIManager2_Tab" caption="UI管理器"><!--添加自定义的组--><group refID="UIManager2_Group1" /><!--添加系统自带的组--><group refID="esri_geoprocessing_analysisTools" /></tab>

实现结果如下:

每个系统自带选项卡、组、菜单、控件都有专有的ID。具体可以查看官方文档。

DAML-ID查询https://github.com/Esri/arcgis-pro-sdk/wiki/DAML-ID-Reference-ADCore.daml另外还有一种方便的方法可以查询控件的ID。打开ArcGIS Pro,点击菜单【工程】—【选项】—【自定义功能区】,勾选【在屏幕提示中显示命令ID】。

设置后,把鼠标放在工具栏或是右键菜单里的控件上时,提示信息会显示这个控件的ID。这样查找起来就更有目的性了。

至于选项卡、组、菜单我没有找到更好的查找方法,只能啃文档了,如果有大神知道更好的方法,望留言告知!


三、在自定义组中添加系统自带的控件

在自定义组中同样可以添加系统自带的按钮、动态菜单、小型组等各种控件。

更新Config.daml文件中的</groups>模块。

      <groups><group id="UIManager2_Group1" caption="示例组" appearsOnAddInTab="false"><!-- 添加自定义按钮 --><button refID="UIManager2_Button1" size="large" /><!-- 添加系统自带的按钮、动态菜单、小型组等控件 --><button refID="esri_core_previewZoomFullButton" size="large" /><dynamicMenu refID="esri_dockPaneSetDynamicMenu" size="large" /><subgroup refID="esri_core_WindowControls" /></group></groups>

实现结果如下:


四、添加按钮至系统自带的右键菜单

将自定义的按钮【UIManager2_Button1】添加到要素类的右键菜单里。

在</insertModule>模块下,新写一段</updateModule>代码块,用于更新系统自带的右键菜单。

	<!--更新系统自带的工具菜单、工具栏等--><updateModule refID="esri_mapping"><menus><!--将自定义的工具添加到要素类的右键菜单--><updateMenu refID="esri_mapping_layerContextMenu"><insertButton refID="UIManager2_Button1" placeWith="esri_mapping_copySelectedLayersButton"/></updateMenu></menus></updateModule>

这里的placeWith参数决定添加进去的控件所在的位置,如果不填,默认放在菜单的最后。我这里放在复制按钮【esri_mapping_copySelectedLayersButton】后面。(这里用上面介绍的第二种查找按钮控件ID的方法就方便很多了)

实现结果如下:


五、工程文件分享

最后,放上工程文件的链接:

UIManager2https://pan.baidu.com/s/1DDv02ZaQo217mMQgkV3m2g?pwd=o157


http://www.ppmy.cn/news/26065.html

相关文章

【MySQL进阶】视图 存储过程 触发器

&#x1f60a;&#x1f60a;作者简介&#x1f60a;&#x1f60a; &#xff1a; 大家好&#xff0c;我是南瓜籽&#xff0c;一个在校大二学生&#xff0c;我将会持续分享Java相关知识。 &#x1f389;&#x1f389;个人主页&#x1f389;&#x1f389; &#xff1a; 南瓜籽的主页…

Pytorch 基础之张量数据类型

学习之前&#xff1a;先了解 Tensor&#xff08;张量&#xff09; 官方文档的解释是&#xff1a; 张量如同数组和矩阵一样, 是一种特殊的数据结构。在PyTorch中, 神经网络的输入、输出以及网络的参数等数据, 都是使用张量来进行描述。 说白了就是一种数据结构 基本数据类型…

Redis学习【8】之Redis RDB持久化

文章目录Redis 持久化1 持久化基本原理2 RDB(Redis DataBase) 持久化2.1 持久化的执行2.2 手动 save 命令2.3 手动 bgsave 命令2.4 自动条件触发2.5 查看持久化时间3 RDB 优化配置3.1 save3.2 stop-write-on-bgsave-error3.3 rdbcompression3.4 rdbchecksum3.5 sanitize-dump-p…

「JVM 编译优化」Java 语法糖(泛型、自动装箱/拆箱、条件编译)

「JVM 编译优化」Java 语法糖&#xff08;泛型、自动装箱/拆箱、条件编译&#xff09; 语法糖可以看做事前端编译期的一些小把戏&#xff1b;虽不会提供实质性的功能改进&#xff0c;但它们或能提高效率&#xff0c;或能提升语法的严谨性&#xff0c;或能减少编码出错的机会&a…

2022黑马Redis跟学笔记.实战篇(六)

2022黑马Redis跟学笔记.实战篇 六4.7.达人探店功能4.7.1.分享探店图文1. 达人探店-发布探店笔记2. 达人探店-查看探店笔记4.7.2.点赞功能4.7.3.基于List实现点赞用户列表TOP104.7.4.基于SortedSet实现点赞排行榜4.8.关注列表4.8.1.关注列表实现原理4.8.2.添加关注1. 好友关注-关…

aws eks 集群访问ecr仓库拉取镜像的认证逻辑

本文主要讨论三个问题 ecr帮助程序在docker上如何配置eks集群访问ecr仓库的逻辑kubelet授权ecr的源码分析 ecr帮助程序 在docker环境下&#xff0c;可以通过在$HOME/.docker/config.json中指定凭证管理程序 docker login aws同样提供了证书助手&#xff0c;避免手动执行ecr认…

云环境渗透测试的重要性

&#x1f315;写在前面 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ✉️今日分享&#xff1a; “在这个世上&#xff0c;除了极稀少的例外&#xff0c;我们其实只有两种选择&#xff1a;要么是孤独&#xff0c;要么就是庸俗。” 随着云计…

2023年前端面试知识点总结(JavaScript篇)

近期整理了一下高频的前端面试题&#xff0c;分享给大家一起来学习。如有问题&#xff0c;欢迎指正&#xff01; 1. JavaScript有哪些数据类型 总共有8种数据类型&#xff0c;分别是Undefined、Null、Boolean、Number、String、Object、Symbol、BigInt Null 代表的含义是空对象…