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