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

相关推荐
魔道不误砍柴功13 分钟前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
NiNg_1_23413 分钟前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
闲晨16 分钟前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
王哈哈^_^1 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
cs_dn_Jie2 小时前
钉钉 H5 微应用 手机端调试
前端·javascript·vue.js·vue·钉钉
测开小菜鸟2 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
开心工作室_kaic2 小时前
ssm068海鲜自助餐厅系统+vue(论文+源码)_kaic
前端·javascript·vue.js
有梦想的刺儿3 小时前
webWorker基本用法
前端·javascript·vue.js
P.H. Infinity3 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天3 小时前
java的threadlocal为何内存泄漏
java