ARCGIS PRO SDK 使用条件管理 Pro UI
ARCGIS PRO UI简单介绍以下:

第一步:在Config.daml中在</AddInfo>标签下加上条件<conditions>标签(必须添加的)
<conditions><!-- 定义条件 ,此处定义了两个--Tab 另一个为 group><insertCondition id="Tab_Toggle_condition" caption="Toggle Tab"><!-- 我们的条件基于此基础状态设置为真或假 --就时开关,如果基础状态设置为真,结果就为假><state id="tab_state" /></insertCondition><insertCondition id="Controls_Toggle_condition" caption="Toggle Controls"><!-- 我们的条件基于此基础状态设置为真或假 --><state id="controls_state" /></insertCondition>
</conditions>
第二步:在 <modules>....... </modules>之间定义以下DAML代码。
<!-- 定义模块 id className autoLoad caption
<insertModule id="StatesAndConditions_Module" className="Module1" autoLoad="false" caption="Module1"><!-- 将该控件托管在单独的选项卡上--><tabs><!-- 定义单独的选项卡,定义了一个TAB(在菜单上 New Custom Tab),由两个group(group2、group3)组构成--><tab id="StatesAndConditions_Tab" caption="New Custom Tab" condition="Tab_Toggle_condition"><group refID="StatesAndConditions_Group2" /><group refID="StatesAndConditions_Group3" /></tab></tabs><groups><!-- 定义三各group(组),StatesAndConditions_Group1、StatesAndConditions_Group2、StatesAndConditions_Group3,StatesAndConditions_Group1在加载项菜单(appearsOnAddInTab="true"),其余在New Custom Tab定义(appearsOnAddInTab="false")-->
<!--appearsOnAddInTab="true" 当前组放在加载项菜单里(加载项Tab)--><group id="StatesAndConditions_Group1" caption="组1" appearsOnAddInTab="true"><!-- 定义图标大小 --><button refID="StatesAndConditions_ToggleTab" size="large" /></group><!--appearsOnAddInTab="false" 当前组只放在定义TAB(菜单里)--><group id="StatesAndConditions_Group2" caption="组2" appearsOnAddInTab="false"><!-- host controls within groups --><button refID="StatesAndConditions_ToggleControls" size="large" /></group><!--appearsOnAddInTab="false" 当前组只放在定义TAB(菜单里)--><group id="StatesAndConditions_Group3" caption="组3" appearsOnAddInTab="false" condition="Controls_Toggle_condition"><!-- 组内的控件 --><!--ARCGIS Pro Core Pro命令--><toolPalette refID="esri_mapping_newMapPalette" /><button refID="esri_core_saveProjectButton" /><button refID="esri_core_saveProjectAsButton" /><gallery refID="esri_mapping_bookmarksNavigateGallery" /><button refID="esri_mapping_mapContextMenu_ExportMap" /></group></groups><controls><!-- 自定义控件,激活或隐藏定义--><button id="StatesAndConditions_ToggleTab" caption="切换自定义选项卡" className="ToggleTab" 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><button id="StatesAndConditions_ToggleControls" caption="切换控制可见性" className="ToggleControls" 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>
第三步: 复制新方法的以下代码,并将其粘贴到区域下方的文件中。此方法在激活和停用之间切换传递到方法中的状态。
C+代码:在ToggleStateModule1.csOverrides文件中
#region Toggle State/// <summary>/// Activate or Deactivate the specified state. State is identified via/// its name. Listen for state changes via the DAML <b>condition</b> attribute/// </summary>/// <param name="stateID"></param>public static void ToggleState(string stateID){if (FrameworkApplication.State.Contains(stateID)){FrameworkApplication.State.Deactivate(stateID);}else{FrameworkApplication.State.Activate(stateID);}}#endregion Toggle State
VB代码:在Module1.vb文件中,粘贴
Public Shared Sub ToggleState(stateID As String)If (FrameworkApplication.State.Contains(stateID)) ThenFrameworkApplication.State.Deactivate(stateID)ElseFrameworkApplication.State.Activate(stateID)End IfEnd Sub
第三步:更新调用该方法的按钮的 click 事件,使其如下所示:ToggleControlsToggleState
C+代码:
protected override void OnClick(){Module1.ToggleState("controls_state");}
vb代码:
Protected Overrides Sub OnClick()Module1.ToggleState("controls_state")End Sub
第四步:更新调用该方法的按钮的 click 事件,使其如下所示:ToggleTabToggleState
C+代码:
protected override void OnClick(){Module1.ToggleState("tab_state");}
vb代码:
Protected Overrides Sub OnClick()Module1.ToggleState("tab_state")
End Sub
第五步:生成和测试代码效果如下:
1.启动工程,这将启动 ArcGIS Pro。 创建新工程或在开始页面打开时打开现有工程。

2.在“加载项”选项卡中,单击新的“Toggle Custom Tab”按钮。这将激活条件,允许带有“New Custom Tab”标题的新选项卡可见。tab_state

3.单击新选项卡以查找带有单个按钮的控件组,标题为“Toggle Controls Visibility”。

按 Toggle Controls Visibility,这将激活条件,使新的 Controls Group 变为可见。controls_state
再次按 Toggle Controls Visibility 停用状态/条件并隐藏控件组。

再按 Toggle Controls Visibility

在“加载项”选项卡上,再次单击“Toggle Custom Tab”以停用状态/条件并隐藏“New Custom Tab”。

注:如果需要把你的控件放入已有的菜单里:
<updateModule refID="esri_core_module"><tabs><updateTab refID="esri_core_insertTab"><insertGroup refID="UpdateInsertTab_Group1" placeWith="esri_project_styles" insert="before"/></updateTab></tabs></updateModule>相关文章:
ARCGIS PRO SDK 使用条件管理 Pro UI
ARCGIS PRO UI简单介绍以下: 第一步:在Config.daml中在</AddInfo>标签下加上条件<conditions>标签(必须添加的) <conditions><!-- 定义条件 ,此处定义了两个--Tab 另一个为 group><insert…...
Halcon经典的边缘检测算子Sobel/Laplace/Canny
Halcon经典的边缘检测算子 文章目录 Halcon经典的边缘检测算子1. Sobel算子2. Laplace 算子3. Canny 算子4. 总结 关于边缘检测,有许多经典的算子,各大图形处理库都有各自的边缘检测算子,这里简要介绍几种。 1. Sobel算子 Sobel算子结合了高…...
用单片机设计PLC电路图
自记: 见另一篇文章,MOS驱动差了一个充电电容,栅极电容充电会有问题; 光耦用的直插,但板子用的贴片,此文档仅供参考 基本列出了PCB板情况,基础元器件,部分连接,原理等…...
【设计模式-6】建造者模式的实现与框架中的应用
建造者模式又被成为生成器模式,是一种使用频率比较低,相对复杂的创建型模式,在很多源码框架中可以看到建造者的使用场景,稍后我们会在本文末尾展示几个框架的使用案例。 建造者模式所构造的对象通常是比较复杂而且庞大的&#x…...
PositiveSSL和Sectigo的多域名证书
首先,我们要知道PositiveSSL是Sectigo旗下的子品牌,提供多种类型的SSL数字证书,包括DV基础型的多域名SSL证书。Sectigo的SSL证书产品同样比较丰富,不仅有DV基础型多域名SSL证书,还有OV企业型以及EV增强型的多域名SSL证…...
Docker:docker exec命令简介
介绍 docker exec [OPTIONS] 容器名称 COMMAND [ARG...] OPTIONS说明: -d,以后台方式执行命令; -e,设置环境变量 -i,交互模式 -t,设置TTY -u,用户名或UID,例如myuser:myu…...
【大数据进阶第三阶段之Hive学习笔记】Hive的数据类型与数据操作
目录 1、Hive数据类型 1.1、基本数据类型 1.2、集合数据类型 1.3、类型转化 2、DDL数据定义 2.1、创建数据库 2.2、查询数据库 2.3删除数据库 2.4、创建表 2.4.1、内部表 2.4.2、外部表 2.4.3管理表与外部表的互相转换 2.5、分区表(partitionÿ…...
GPT2:Language Models are Unsupervised Multitask Learners
目录 一、背景与动机 二、卖点与创新 三、几个问题 四、具体是如何做的 1、更多、优质的数据,更大的模型 2、大数据量,大模型使得zero-shot成为可能 3、使用prompt做下游任务 五、一些资料 一、背景与动机 基于 Transformer 解码器的 GPT-1 证明…...
微创新与稳定性的权衡
之前做过一个项目,业务最高峰CPU使用率也才50%,是一个IO密集型的应用。里面涉及一些业务编排,所以为了提高CPU使用率,我有两个方案:一个是简单的梳理将任务可并行的采用并行流、额外线程池等方式做并行;另外…...
对回调函数的各种讲解说明
有没有跟我师弟一样的童靴~,学习和使用ROS节点时,对其中的callback函数一直摸不着头脑的,以下这么多回调函数的讲解,挨个看,你总会懂的O.o 回调函数怎么调用,如何定义回调函数: 回调函数怎么调用,如何定义…...
Java多线程:创建多线程的三种方式
在Java中,有三种方式创建多线程,继承类Thread,继承接口Runnable,继承接口Callable。其中Thread和Runnable需要重写方法run,方法run没有返回值;Callable需要重写方法call,方法call可以返回值。 …...
Unity中打印信息的两种方式
不继承MonoBehaviour的普通C#类中打印信息: 使用Debug类的方法: Unity提供了Debug类,其中包含了一些用于打印信息的静态方法。以下是常用的几种方法: Debug.Log(message):打印普通信息。Debug.LogWarning(message)&a…...
给定n个字符串s[1...n], 求有多少个数对(i, j), 满足i < j 且 s[i] + s[j] == s[j] + s[i]?
题目 思路: 对于字符串a,b, (a.size() < b.size()), 考虑对字符串b满足什么条件: 由1、3可知a是b的前后缀,由2知b有一个周期是3,即a.size(),所以b是用多个a拼接而成的,有因为a是b的前后缀&…...
Linux磁盘空间与文件大小查看命令详解
1. 查看磁盘空间大小 在Linux系统中,有多个命令可以用来查看磁盘空间的使用情况。最常用的命令是df(disk free)。 df -hdf命令的 -h 选项以人类可读的方式显示磁盘空间,该命令将显示文件系统的使用情况、剩余空间等信息。 2. 查看…...
网络通信过程的一些基础问题
客户端A在和服务器进行TCP/IP通信时,发送和接收数据使用的是同一个端口吗? 这个问题可以这样来思考:在客户端A与服务器B建立连接时,A需要指定一个端口a向服务器发送数据。当服务器接收到A的报文时,从报文头部解析出A的…...
STL——stack容器和queue容器详解
目录 💡stack 💡基本概念 常用接口 💡queue 💡基本概念 💡常用接口 💡stack 💡基本概念 栈(stack):一种特殊的线性表,其只允许在固定的一端…...
django websocket实现聊天室功能
注意事项channel版本 django2.x 需要匹配安装 channels 2 django3.x 需要匹配安装 channels 3 Django3.2.4 channels3.0.3 Django3.2.* channels3.0.2 Django4.2 channles3.0.5 是因为最新版channels默认不带daphne服务器 直接用命令 python manage.py runsever 默认运行的是w…...
软件测评中心▏性能测试之压力测试、负载测试的区别和联系简析
在如今的信息时代,软件已经成为人们日常工作和生活不可或缺的一部分。然而,随着软件的发展和应用范围的不断扩大,软件性能的优劣也成为了影响用户使用体验的重要因素。 软件性能测试即对软件在不同条件下的性能进行评估和验证的过程。通过模…...
Go 语言 panic 和 recover 详解
panic() 和 recover() 是 Go 语言中用于处理错误的两个重要函数。panic() 函数用于中止程序并引发panic,而 recover() 函数用于捕获panic并恢复程序的执行。 什么是panic和recover? panic panic() 函数用于中止程序并引发panic。panic() 函数可以接收…...
NAND Separate Command Address (SCA) 接口数据传输解读
在采用Separate Command Address (SCA) 接口的存储产品中,DQ input burst和DQ output burst又是什么样的策略呢? DQ Input Burst: 在读取操作期间,数据以一种快速并行的方式通过DQ总线传送到控制器。在SCA接口下,虽然命令和地址信…...
如何确保usearch内存安全:Safe C++与Rust的终极对比指南
如何确保usearch内存安全:Safe C与Rust的终极对比指南 【免费下载链接】usearch Fastest Open-Source Search & Clustering engine for Vectors & 🔜 Strings in C, C, Python, JavaScript, Rust, Java, Objective-C, Swift, C#, GoLang, and …...
抖音内容一键保存:3分钟搞定无水印批量下载完整指南
抖音内容一键保存:3分钟搞定无水印批量下载完整指南 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 你是不是也遇到过这样的烦恼?看到精彩的抖音视频想保存下来反复学习,却…...
DBNet++的ASF模块真的只是空间注意力吗?深入对比论文与官方代码的三种实现
DBNet的ASF模块:论文与代码的注意力机制差异深度解析 在文本检测领域,DBNet因其出色的性能和实时性成为工业界和学术界的热门选择。其核心创新之一——自适应尺度融合(ASF)模块,在论文中被描述为空间注意力机制&#x…...
B2B战略到营销分解实战:OGSM / 主题 / 内容 / 渠道 / 节奏五层框架
# B2B战略到营销分解实战:OGSM / 主题 / 内容 / 渠道 / 节奏五层框架先给结论:很多B2B企业真正缺的不是动作,而是把战略翻译成可协同、可执行、可复盘的年度经营结构。## 一、定义 B2B战略到营销分解是什么:把品牌战略中的目标客户…...
Kali Linux 2026.1 重磅发布,内核升至6.18
作为全球最受欢迎的渗透测试与安全审计Linux发行版,Kali Linux在2026年迎来了年度首发版本——Kali Linux 2026.1。这次更新不仅延续了每年“.1”版本的视觉刷新传统,更特别致敬BackTrack Linux 20周年,引入“BackTrack模式”,同时升级内核至6.18,并新增8款实用工具。无论…...
DeepSeek-R1-Distill-Qwen-7B实测:推理能力超强的7B小模型
DeepSeek-R1-Distill-Qwen-7B实测:推理能力超强的7B小模型 1. 模型概述 DeepSeek-R1-Distill-Qwen-7B是DeepSeek团队推出的轻量级推理模型,基于Qwen架构蒸馏而来。这个7B参数规模的模型在保持较小体积的同时,展现了令人印象深刻的推理能力。…...
H5端微信登录实战:从配置到用户信息获取的全流程解析
1. 为什么需要H5端微信登录? 每次开发新项目时,用户注册环节总是让人头疼。传统的账号密码注册方式,不仅流程繁琐,还经常遇到用户忘记密码的问题。我在去年开发一个电商H5项目时,就发现超过60%的用户流失都发生在注册…...
Treap(树堆)实战:从原理到代码实现与性能对比
1. 什么是Treap:当二叉搜索树遇上堆 第一次听说Treap这个数据结构时,我正被红黑树的旋转操作折磨得焦头烂额。直到某天在算法竞赛讨论区看到有人用20行代码实现了一个"魔法平衡树",才真正打开了新世界的大门。Treap这个名字本身就揭…...
宝塔面板异地备份数据全攻略:从本地到云端的安全守护
1. 为什么你需要宝塔面板异地备份? 想象一下这样的场景:凌晨三点,你的服务器突然宕机,硬盘彻底损坏。如果所有数据都只存在本地,这意味着网站所有内容、用户数据、订单记录将瞬间归零。我见过太多站长因为单点存储导致…...
深入解析Host头攻击:原理、危害与防御策略
1. Host头攻击的基本原理 HTTP协议中的Host头字段就像快递单上的收件人地址。当你在浏览器输入www.example.com时,浏览器会在HTTP请求头部自动添加一行Host: www.example.com,告诉服务器你想访问哪个网站。这个设计本是为了让一台服务器能托管多个网站&a…...
