• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

gisoracle

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

ArcGIS Pro二次开发禁用某些控件(Tab,Group,Control)--常用于权限管理

https://blog.csdn.net/qq_42539194/article/details/108472634

 

在用ArcGIS Pro进行个性化开发时,尤其当客户想增加权限管理时,就会涉及控件的(禁用/启用)和(可见/不可见),下面记录下我的学习过程,方便以后回顾。

ArcGIS Pro SDK for Microsoft .NET中框架部分(关于常见必备知识都在这里)

https://github.com/esri/arcgis-pro-sdk/wiki/ProConcepts-Framework#button

ArcGIS Pro中Manage the Pro UI with conditions地址(通过condition条件来控制控件的可见性)

https://developers.arcgis.com/labs/pro/manage-the-pro-ui-with-conditions/

上代码:
第一步:

在Config.daml中在<AddInfo>标签下加上条件<conditions>标签

以其中第二个为例:

id="Controls_Toggle_condition" 你要禁用那个控件 就在对应控件增加condition属性并赋值id内容,

注意下面的id名称和group中condition属性

    <insertCondition id="Controls_Toggle_condition" caption="Toggle Controls">
          <!-- 我们的条件Controls_Toggle_condition根据这个下面controls_state的状态设置为真或假 -->
          <state id="controls_state" />
        </insertCondition>

    <!--第三组-->
            <!--condition="Controls_Toggle_condition"决定该组是否显示-->
            <group id="StatesAndConditions_Group3" caption="Controls Group" appearsOnAddInTab="false" condition="Controls_Toggle_condition">
              <!-- host controls within groups -->
              <!--Core Pro Commands-->
              <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>

 第二步:

在Module1类中Overrides下加入方法ToggleState

 

Module1类代码如下:

    namespace ControlVisibility
    {
        internal class Module1 : Module
        {
            private static Module1 _this = null;
     
            /// <summary>
            /// Retrieve the singleton instance to this module here
            /// </summary>
            public static Module1 Current
            {
                get
                {
                    return _this ?? (_this = (Module1)FrameworkApplication.FindModule("ControlVisibility_Module"));
                }
            }
            #region Overrides
            /// <summary>
            /// Called by Framework when ArcGIS Pro is closing
            /// </summary>
            /// <returns>False to prevent Pro from closing, otherwise True</returns>
            protected override bool CanUnload()
            {
                //TODO - add your business logic
                //return false to ~cancel~ Application close
                return true;
            }
            #endregion Overrides
     
            #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
            /// 激活或停用指定的状态。状态通过其名称标识。通过DAML 条件属性侦听状态更改
            /// </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
     
        }
    }

第三步:

 在对应按钮的点击事件中调用步骤二的方法,并传递字符串标签,标签为步骤一中 <state id="controls_state" />

    namespace ControlVisibility
    {
        internal class ToggleTab : Button
        {
            protected override void OnClick()
            {
                 Module1.ToggleState("controls_state");
            }
        }
    }

这样就可以通过点击某个按钮实现Tab的隐藏和显示了(group的隐藏与显示也是这样),具体的demo在文章上部第二个链接中,连接下部github也有对应的demo,可以下载学习下 。

这里有个问题是:针对Tap,Group都可以实现显示与隐藏,但是针对Control只能禁用和启用,我研究很久也没找到解决办法,如果有知道好方法的欢迎补充
————————————————
版权声明:本文为CSDN博主「韦_恩」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42539194/article/details/108472634

posted on 2022-09-12 22:15  gisai  阅读(72)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3