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

相关推荐
程序员清风4 分钟前
快手二面:乐观锁是怎么用它来处理多线程问题的?
java·后端·面试
訾博ZiBo15 分钟前
【Vibe Coding】001-前端界面常用布局
前端
软件技术NINI15 分钟前
MATLAB疑难诊疗:从调试到优化的全攻略
javascript·css·python·html
IT_陈寒18 分钟前
《Redis性能翻倍的7个冷门技巧,90%开发者都不知道!》
前端·人工智能·后端
一线大码19 分钟前
SpringBoot 优雅实现接口的多实现类方式
java·spring boot·后端
花伤情犹在24 分钟前
Java Stream 高级应用:优雅地扁平化(FlatMap)递归树形结构数据
java·stream·function·flatmap
歪歪10028 分钟前
React Native开发Android&IOS流程完整指南
android·开发语言·前端·react native·ios·前端框架
知识分享小能手30 分钟前
uni-app 入门学习教程,从入门到精通,uni-app组件 —— 知识点详解与实战案例(4)
前端·javascript·学习·微信小程序·小程序·前端框架·uni-app
yaoxin52112337 分钟前
212. Java 函数式编程风格 - Java 编程风格转换:命令式 vs 函数式(以循环为例)
java·开发语言
ZYMFZ37 分钟前
python面向对象
前端·数据库·python