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)) Then
         FrameworkApplication.State.Deactivate(stateID)
     Else
         FrameworkApplication.State.Activate(stateID)
     End If
 End Sub

第三步:更新调用该方法的按钮的 click 事件,使其如下所示:ToggleControlsToggleState

C+代码:

复制代码
protected override void OnClick()
    {
        Module1.ToggleState("controls_state");
    }

vb代码:

复制代码
 Protected Overrides Sub OnClick()
     Module1.ToggleState("controls_state")
 End Sub

第四步:更新调用该方法的按钮的 click 事件,使其如下所示:ToggleTab``ToggleState

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"。

相关推荐
m0_728647087 分钟前
微信小程序开发:废品回收小程序-功能清单
java·小程序·小程序开发·废品回收小程序·微信小程序开发
LaughingZhu12 分钟前
PH热榜 | 2025-04-09
前端·数据库·人工智能·mysql·开源
枫super25 分钟前
Day-03 前端 Web-Vue & Axios 基础
前端·javascript·vue.js
极客先躯43 分钟前
高级java每日一道面试题-2025年3月31日-微服务篇[Nacos篇]-Nacos集群模式下的部署方案有哪些?
java·开发语言·微服务
计算机学姐1 小时前
基于SSM的校园美食交流系统
java·vue.js·mysql·spring·tomcat·mybatis·美食
惊鸿Randy1 小时前
AI模型多阶段调用进度追踪系统设计文档
java·spring boot·ai·ai编程
程序猿chen1 小时前
Vue.js组件安全工程化演进:从防御体系构建到安全性能融合
前端·vue.js·安全·面试·前端框架·跳槽·安全架构
hweiyu001 小时前
maven导入本地jar示例
java·maven·jar
你也来冲浪吗1 小时前
MD编辑器用法讲解
前端
佩奇的技术笔记1 小时前
Java学习手册:Java集合框架详解
java·学习